SIGINTシグナルを処理するために作成した関数が定数ループでスタックされています。この考え方は、CTRL-Cを親プロセスが無視し、子プロセスに送信することです(デフォルトではCTRL-Cを処理します)。何が起こるかは、CTRL-Cを押すとシグナルハンドラ関数が呼び出されますが、無限ループに陥ります。 killコールは、送信者プロセス以外のプロセスグループ内のすべてのプロセスにSIGTERMを送信することになっています。どんな助けもありがとう。シグナルハンドラ関数がループを維持する
機能コードは次のとおりです。
void intHandler(int signum) {
kill(0, SIGTERM);
}(メインで)
関数呼び出しのコードは次のとおりです。キルのmanページから
(void) sigset(SIGINT, intHandler);
"送信者プロセスを除いて" - 仕様にはそのような記述はありません。 SIGTERMをブロックするか、プロセスをプロセスグループから削除する必要があります。 –
、グローバルで子プロセスを追跡し、すべてのプロセスではなく子プロセスを明示的に 'kill'します。 IIRCでは 'sigaction'を使用して、' SIGTERM'が親によって無視され、子機でブロック解除されるようにすることもできます。 –
私はあなたが言ったことを正確にやり遂げました。それは私が必要とする通りに正確に動作します。ありがとうございます – zetatr