子プロセスのプロセスを作成しようとしていますwaitpid()
が、間隔ごとに何かを出力します。
私の現在の計画はitimer
、印刷をwaitpid()
処理し、終了 SIGALRM
時にタイマーを停止することです。waitpid()
私が理解できない唯一の部分は、 がSIGALRM
を中断しないようにすることwaitpid()
です。
マニュアルページを調べましたが、これに関するフラグはありません。
考え?
waitpid()
返さ-1
れてerrno
等しい場合は、EINTR
呼び出しを最初からやり直しwaitpid()
ます。
pid_t pid;
while (((pid_t) -1) == (pid = waitpid(...)))
{
if (EINTR == errno)
{
continue;
}
...
}
別の方法として (少なくとも Linux の場合)、シグナル ハンドラーのインストール時に設定されwaitpid()
たフラグを介して、シグナルの受信時の の戻りを回避できます。SA_RESTART
詳細については、こちらを参照してください: http://man7.org/linux/man-pages/man7/signal.7.html
waitpid() を呼び出す前にシグナルをマスクする必要がありますが、ブロックが解除されるまでアラームが遅延するか、waitpid() の戻り値と EINTR の errno を確認する必要があります。