web-dev-qa-db-ja.com

kill -HUPを受け取ったときのプログラムの動作は?

Kill信号HUPを受信したときにプログラムが何をするかを見つける方法はありますか?
コマンドofc:Dを単に実行せずに

例えば、
killall -HUP pppdはpppdを再起動します
killall -HUP firefoxはFirefoxを殺すだけです

32
bbaja42

そのドキュメントを読んでください。それが唯一の方法です。 キースはすでに書いている と同じように、 [〜#〜] sighup [〜#〜] の本来の意味は、ユーザーがプログラムにアクセスできなくなったことであり、対話型プログラムは死ぬ。 Daemons —ユーザーと直接対話しないプログラム—この動作は必要なく、SIGHUPを受け取ったときに構成ファイルを再ロードすることがよくあります。しかし、これらは単なる慣習です。

ソースがあれば、それも読むことができます。または、バイナリのみがある場合は、それを逆アセンブルして、sigactionのシグナルハンドラーをセットアップするSIGHUP呼び出しを探し、それらのシグナルハンドラーが何を行っているかを理解することができます。そもそも、SIGHUPをそのプログラムに送信しない方が簡単です。

任意の時点で、特定のプロセスは特定のシグナルに関して3つの状態の1つにあります:それを無視する、デフォルトのアクションを実行する、またはカスタムハンドラーを実行する。多くのuniceでは、psを使用してプロセスのシグナルマスクを表示できます。 ps s Linuxの場合。これは、プロセスがシグナルを無視しているか、SIGHUPで即座に終了するかどうかを通知しますが、プロセスがハンドラーを設定している場合、ハンドラーが何を実行するかを通知できません。

デフォルトのアクションは、SIGHUPでプロセスを終了することです。見る man 7 signal 詳細については。しかし、プログラムはそれをトラップし、彼らが望むすべてを行うことができます。デーモンプロセスは終了することが想定されていないため、通常、(pppdが行うように)自身を再初期化するなどの他の目的でSIGHUPを使用します。 Firefoxはデフォルトのアクションを維持します。

19
Keith