信号ハンドラのラッパー設定

信号ハンドラのラッパー設定

指定されたコマンドを実行し、コマンドが指定された信号を受信したときに実行されるようにシグナルハンドラを設定するラッパーが必要です。

問題はこれである:

  1. これを行うことができるユーティリティはありますか?
  2. それ以外の場合は、bashのコマンドを使用してtrapこれを実行できますかexec
  3. そうでない場合はどうすればよいですか? (たとえば、いくつかのシステムコールを実行するためにCでプログラムを作成します。)

編集:ターゲットプラットフォームはGNU / Linuxです。

編集2:Ignacioの答えに従って、次のプリロードSOを作成しました。これ

答え1

できません。exec(3p)マニュアルページから:

呼び出しプロセスイメージによってキャプチャされるように設定された信号は、新しいプロセスイメージのデフォルトジョブに設定する必要があります。

プログラムが開始される前に、シグナルハンドラを接続するプリロードSOを作成する必要があります。

答え2

信号()のみを無視するようにすることができます。シェル()またはCプログラム()では信号ハンドラを提供SIG_IGNできません。 exec が呼び出されると、すべてのシグナルハンドラが交換されます。trapsignal(2)

例:

:
trap "" 1 2
exec sleep 100000

その後、バックグラウンドまたはフォアグラウンドでプログラムを呼び出し、SIGHUPまたはプログラムに送信します。SIGINT無視されます。コードをトラップに入れると、exec で信号がリセットされます。

:
trap "echo signal caught" 1 2
exec sleep 10000

これは、送信された信号の「信号捕捉」を印刷しないが、実際にプログラムを終了する。

関連情報