2

子プロセスのプロセスを作成しようとしていますwaitpid()が、間隔ごとに何かを出力します。

私の現在の計画はitimer、印刷をwaitpid()処理し、終了 SIGALRM時にタイマーを停止することです。waitpid()

私が理解できない唯一の部分は、 がSIGALRMを中断しないようにすることwaitpid()です。

マニュアルページを調べましたが、これに関するフラグはありません。

考え?

4

2 に答える 2

1

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

于 2016-05-02T17:01:53.457 に答える
0

waitpid() を呼び出す前にシグナルをマスクする必要がありますが、ブロックが解除されるまでアラームが遅延するか、waitpid() の戻り値と EINTR の errno を確認する必要があります。

于 2016-05-02T17:01:14.420 に答える