Linux環境で、プロセスから返される終了コードが0であることを確認しながら、killシグナルをプロセスに送信するにはどうすればよいですか?私はこれのためにいくつかの派手なGDBマジックを行わなければならないでしょうか、それとも私が知らない派手な殺害信号がありますか?
テストケース:
cat; echo $?
killall cat
さまざまなkillシグナルを試しても、129、137、143などの異なるリターンシグナルしか提供されません。私の目標は、スクリプトが実行するプロセスをkillすることですが、スクリプトは成功したと見なします。
いいえ。シェルがSIGCHLD
をキャッチすると、無条件に戻り値をゼロ以外の値に適切に設定するため、スクリプトまたはシェルのいずれかを変更する必要があります。
わかりませんが、リストされた信号のいずれかが受信された場合、これは0で終了します。関数の呼び出しなど、他のアクションを実行できます。
#!/bin/bash
trap 'exit 0' SIGINT SIGQUIT SIGTERM
このワンライナーは私のために働きました:
/bin/bash -c '/usr/bin/killall -q process_name; exit 0'
ちょっとハッキーな方法ですが….
プロセスのラッパーを作成して、SIGCHLDハンドラーをオーバーライドできます。例えば:
#!/bin/bash
set -o monitor
trap 'exit(0)' CHLD
/some/dir/yourcommand
その後、スクリプトをプロセスの代わりにこのラッパーを実行するようにすることができます。これを$ PATHの前の方に置き、名前を同じ名前に変更します。