2017-07-20 9 views
1

バックグラウンドジョブが失敗した場合(シグナルSEGV、ABRT、KILL、INT ...など)、がバックグラウンドのときに通知する方法 linux bashスクリプト。バックグラウンドジョブが失敗したときにlinuxのbashスクリプトを停止する

set -e 
foo & 
foo_pid=$! 
# Do tasks that requires that foo is running 
wait $foo_pid 

は機能しません。

set -e 
foo & 
foo_pid=$! 

# If this script is killed, kill the `cp'. 
trap "kill $foo_pid 2> /dev/null" EXIT 

while kill -0 $foo_pid 2> /dev/null; do 
    # Do smth 
    ... 
    sleep 1 
done 

答えて

1

は、時間と日付を持つファイルへの信号および更新をキャッチしてみてください。

set -e 
act() { 
    echo "Caught signal!" > /tmp/file.txt 
    echo `date` >> /tmp/file.txt 
    exit 
} 

trap act SIGINT SIGTERM SIGKILL 

foo & 
foo_pid=$! 
# Do tasks that requires that foo is running 
wait $foo_pid 
+0

これで、基本的にすべてのコマンドに対してプロセスが存在することを確認していますか?コマンドが存在することを要求するコマンドは、そのループでラップしますか? – user877329

0

を助けることができる

+0

問題はトラップがトリガーされていないことです。 – user877329

関連する問題