kill -HUPが受信されたときのプログラムの動作は?


32

killシグナルHUPを受け取ったときにプログラムが何をするかを知る方法はありますか?
単純にコマンドcを実行せずに:D

たとえば、
killall -HUP pppdpppdを再起動
killall -HUP firefoxすると、firefoxが強制終了されます

回答:


47

そのドキュメントを読んでください。それが唯一の方法です。以下のようキースはすでに書いた、の本来の意味SIGHUPは、ユーザーがプログラムへのアクセスを失ったということでした、ので、対話型プログラムは死ぬ必要があります。デーモン(ユーザーと直接対話しないプログラム)は、この動作を必要とせず、SIGHUPを受け取ったときに構成ファイルを頻繁に再読み込みします。しかし、これらは単なる慣例です。

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

任意の時点で、特定のシグナルに関して、特定のプロセスは、それを無視する、デフォルトのアクションを実行する、またはカスタムハンドラーを実行する3つの状態のいずれかになります。多くの大学ではps、たとえばps sLinux上で、プロセスのシグナルマスクを見ることができます。プロセスがシグナルを無視しているのか、SIGHUPで即座に停止するのかはわかりますが、プロセスがハンドラを設定している場合、ハンドラが何をするのかわかりません。


1
SIGHUPは、ダイヤルアップモデムの時代に遡ります。モデム接続のハングアップを通知しました。それはまだ接続を落としませんが、これらの日、そのめったに接続がdropped.Pことになりハングアップに適用される
BillThor

@bill True。ただし、SSHセッションは、クライアント接続が失われた場合、子プロセスでもあるSIGHUPになります。
キース

@キース:それが、ドロップされた接続に適用されることを示した理由であり、もはやハングアップによって引き起こされることはほとんどありません。この時点で、名前をSIGDCNなどの切断に関連する名前に変更するのはわかりにくいでしょう。
-BillThor

18

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.