2017-02-25 8 views
1

古い方法 "シグナル"と新しい方法 "sigaction":SIG_KILLはプログラムで安全に処理できますか?これに異なるLinuxカーネルバージョンの違いはありますか?私は2.6.30からより高いバージョンにアップグレードしようとしていました。開発の観点から知るために、このSIG_KILLは安全に処理できますか?LinuxシグナルSIG_KILLをプロセスsighandlerで処理できますか?

+0

'man'から:_ SIGKILLまたはSIGSTOPをブロックすることはできません。そうしようとする試みは黙って無視されます。 –

答えて

1

いいえ、Matteo Piano氏は、シグナルハンドラを使ってSIGKILLを処理することはできないと指摘しています。バグのあるバージョンやそれ以外の非標準のバージョンについて話している場合を除き、異なるカーネルバージョン間で違いはありません。 man 7 signalの "標準信号" セクションから

信号SIGKILLとSIGSTOPは、キャッチ遮断、または無視することができません。

Linuxカーネルソースをダウンロードして好きなように変更するだけでも十分です。しかし、私はSIGKILLを捕まえることを推奨していないと思います。もしそうであれば、私はそれを「安全」と呼んでいません。プロセスを停止させるためにハードウェアのリセットを行う必要がなくなります。

あなたはSIGKILLをキャッチしたいと思いますなぜあなたは代わりにSIGHUPSIGINTまたはSIGQUITのような他の信号を使用して検討する必要があり 、あなたの質問に指定されていないとして。これらの他のシグナルは、おそらく処理されるためのものであり、Unix/Linuxプログラムの中にはそのようなものがあります。

また、(SIGKILLを捕まえて)、ターゲットプロセスが終了したかどうかを検出するためにプロセスを休止させることも考えられます。たとえば、親プロセスは、子プロセスからのSIGCHLDシグナルを探して、シグナルハンドラでやりたいと思ったのと同じイベントを発生させることができます。

関連する問題