3

私は次の問題を抱えています:

私はメイン(親)プロセスを持っており、フォーク関数を使用して別のプロセス(子)を作成します。ゾンビを排除するために子供のステータスをキャッチしています。子プロセスが1つある場合は正しくキャッチされますが、親プロセスによって作成されたプロセス(aprx。30)がさらにある場合は、aprxがあります。残り4体のゾンビ=親がすべての子を捕まえるわけではありません(ステータス/状態を返す= <defunct>)。

子のステータスは、を使用してキャッチされます

void selfkill(int status) {
    wait(&status);
}

signal(SIGCHLD, selfkill);

前もって感謝します。

4

1 に答える 1

4

waitpid()おそらく、シグナルハンドラー内のループでWNOHANGとともに使用する必要があります。

おそらく起こることは、すべての信号が配信されるわけではないということです-それらのいくつかは互いに近すぎて到着するためです。sigaction()の代わりにを使用することで、この問題を軽減できる可能性がsignal()あります。

于 2010-11-18T07:22:28.603 に答える