特定のコマンドを実行し、コマンドが指定された信号を受信したときに実行されるように信号ハンドラーを設定するラッパープログラムが必要です。
質問はこれです:
trap
およびexec
を使用してこれを行うことは可能ですか?編集:ターゲットプラットフォームはGNU/Linuxです。
編集2:Ignacioの答えに従って、私はなんとかプリロードSOのように見えます this 。
できません。 exec(3p)
のマニュアルページから:
呼び出し元のプロセスイメージによってキャッチされるように設定された信号は、新しいプロセスイメージのデフォルトのアクションに設定されます。
プログラムが開始する前にシグナルハンドラーをフックするプリロードSOを作成する必要があります。
シグナルを無視することしかできません(_SIG_IGN
_);シェル(trap
)またはCプログラム(signal(2)
)からシグナルハンドラーを提供することはできません。 execが呼び出されると、すべてのシグナルハンドラが置き換えられます。
例:
_:
trap "" 1 2
exec sleep 100000
_
次に、バックグラウンドまたはフォアでプログラムを呼び出し、SIGHUP
またはSIGINT
のいずれかをプログラムに送信します。無視されます。コードをトラップに入れると、execでシグナルがリセットされます。
_:
trap "echo signal caught" 1 2
exec sleep 10000
_
これは、シグナルを送信した「シグナルキャッチ」を出力しませんが、実際にはプログラムを終了します。