子プロセスのプロセスを作成しようとしています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 を確認する必要があります。