0

パイプからの読み取りとファイルへの書き込みを処理するフォークされたプロセス (「pipe2file」) を使用して、プログラム (プログラム「exec'ed」) の出力をリダイレクトしています。

「exec'ed」プログラムが強制終了され、その待機ステータスが取得された場合、「pipe2file」プロセスに対して同じことを行う必要があります。
だから、私が正確にやっていることはこれです:

  1. 使用したパイプの端を閉じる
  2. 経由でキル信号を送信するkill(pipe2file, SIGKILL)
  3. waitpid を使用して、このような終了ステータスを取得しますwaitpid(pipe2file, &status, 1)
  4. でステータスを確認するif (WIFEXITED(status) || WIFSIGNALED(status))

それでも、上記の手順の後、pipe2file プロセスは最終的にゾンビになります。
なにが問題ですか?

4

1 に答える 1

0

ここに競合状態があります。電話killしてもすぐに子供が死ぬわけではありません。少し時間がかかります。お子様が退室するのを十分に待っていません。

waitpid(pipe2file, &status, 1)

あなたの子供がまだ終了していない場合はあきらめます。1in options はオプションです(WNOHANG実際に終了するまで待たないでください)。に変更します

waitpid(pipe2file, &status, 0)
于 2013-04-25T13:22:44.717 に答える