次のような SIGCHLD ハンドラの例がいくつかあります。
void child()
{
wait(0);
signal(SIGCHLD, child);
}
void server_main()
{
...
signal(SIGCHLD, child);
...
for(;;;) {
...
switch(fork()) {
...
}
}
ハンドラーには、私を混乱させる 2 つの部分があります。1)。SIGCHLD は、子プロセスが終了または停止したときにキャッチされます。それでは、なぜハンドラー内で待機を呼び出す必要があるのでしょうか? 信号はすでに到着しています。2)。SIGCHLD ハンドラを再インストールする必要があるのはなぜですか。シグナル呼び出しはハンドラーを一度だけインストールしませんか?
ありがとう!