2012-03-25 14 views
1

自分のプロセスから別のプロセスに送信されたシグナルのキャプチャ/インターセプトについてはどうしたらよいですか? C、Ruby、または任意のLinuxパッケージを使用する予定。プロセスからのシグナルの傍受

+1

あなたが探しているstrace(http://en.wikipedia.org/wiki/Strace)のようなものですか? – ascobol

+0

どういう意味なのかよく分かりません。シグナルを送信している場合は、kill(C言語の場合)だけをラップし、送信しているすべてのシグナルを数えます。シグナルが送信された場合、それを傍受することはできず、OSに渡されます。編集:@ascobol:右、彼はそれを外部的に監視することを意味する場合は、Strace、良い点を使用することができます。 – tchap

+0

私の意図は、プロセスがシグナルを送信したときに管理者がフックを入れるプロセス監視デーモンを作成することです。たとえば、 'kill -QUIT worker_master'を送信すると、私は' worker_master'を監視し、 'worker_slaves'を正常にシャットダウンするフックを実装できます。すべてのスレーブが停止した後、実際にはマスタープロセスに 'QUIT'信号を送ります。 – RyanScottLewis

答えて

3

システムsignal/sigactionの代わりにシグナルハンドラのインターセプト設定を呼び出し、独自のハンドラを設定するライブラリラッパーを作成できます。受信した信号では、あなたの仕事をして後でユーザーハンドラを呼び出すことができます。ご自分でシステムsignal/sigactionルーチンを置き換えるには、LD_PRELOADを使用してください。

+0

私はこれを試してみます、ありがとう! – RyanScottLewis

1

私はptrace(2)システムコールがあなたの望むものだと思います。マニュアルから:「信号が無視されても、信号が送られるたびに子供は停止する(例外は通常の効果を持つSIGKILLです)。親は次の待機時に通知されます(2)子プロセスが停止している間、子プロセスを検査し修正することができます。親は子プロセスを継続させ、必要に応じて配信信号を無視します。

関連する問題