指定されたコマンドを実行し、コマンドが指定された信号を受信したときに実行されるようにシグナルハンドラを設定するラッパーが必要です。
問題はこれである:
- これを行うことができるユーティリティはありますか?
- それ以外の場合は、bashのコマンドを使用して
trap
これを実行できますかexec
? - そうでない場合はどうすればよいですか? (たとえば、いくつかのシステムコールを実行するためにCでプログラムを作成します。)
編集:ターゲットプラットフォームはGNU / Linuxです。
編集2:Ignacioの答えに従って、次のプリロードSOを作成しました。これ。
答え1
できません。exec(3p)
マニュアルページから:
呼び出しプロセスイメージによってキャプチャされるように設定された信号は、新しいプロセスイメージのデフォルトジョブに設定する必要があります。
プログラムが開始される前に、シグナルハンドラを接続するプリロードSOを作成する必要があります。
答え2
信号()のみを無視するようにすることができます。シェル()またはCプログラム()では信号ハンドラを提供SIG_IGN
できません。 exec が呼び出されると、すべてのシグナルハンドラが交換されます。trap
signal(2)
例:
:
trap "" 1 2
exec sleep 100000
その後、バックグラウンドまたはフォアグラウンドでプログラムを呼び出し、SIGHUP
またはプログラムに送信します。SIGINT
無視されます。コードをトラップに入れると、exec で信号がリセットされます。
:
trap "echo signal caught" 1 2
exec sleep 10000
これは、送信された信号の「信号捕捉」を印刷しないが、実際にプログラムを終了する。