2

私はアプリケーションを持っています: "app-ctrl" Process-id: 1000

シグナル SIGSEGV を送信して、このプロセスを強制終了したいと考えています。(シミュレーション目的で必要)

[santosh@localhost ~]$ kill -11 1000

初めて app-ctrl が殺されました。次のコマンドで再び開始したとき:

[santosh@localhost ~]$ start app-ctrl

新しいプロセス ID 2000 を取得します。

コマンド「kill -11 2000」でそれを殺したい場合。それは動作しません。

他のすべてのシグナルは、「kill -6 2000」または「kill -9 2000」のように機能します。デバッグを行うと、どういうわけかSIGSEGVがブロックされていることがわかりました。そこで、メイン コード ベース内に次の 3 つのステートメントを追加します。

sigemptyset (&x);

sigaddset(&x, SIGSEGV);

sigprocmask(SIG_UNBLOCK, &x, NULL);

上記の 3 行を追加した後、「kill -11」は常に新しいバイナリで機能します。「app-ctrl」が起動​​されるたびに、上記の 3 つのステートメントが実行されます。

デフォルトで SIGSEGV がブロックされる理由。SIGSEGV がブロックされないようにする方法はありますか?

4

0 に答える 0