1 つの -- 確かに手荒な -- アプローチは、 strace
を使用することです。 :
$ strace -e trace=none -e signal=none -p 12345
PID 12345 でプロセスを監視し、システム コールをインターセプトしません (最初の -e
) 信号なし (2 番目の -e
)。プロセスが通常の方法で終了すると、終了値が出力されます。
プロセスがシグナルによって終了した場合、strace はサイレントに終了します (上記のオプションで実行した場合)。たとえば、次のように使用できます。 -e signal=kill
この動作を変更します。ただし、-e signal=all
に注意してください。 (または、同等に、-e signal
を省略します) オプション) は、プログラムがシグナルを受信して処理する場合、大量の出力を生成する可能性があります。
<オール>
「通知」の実行の連鎖
$ process; notify $? &
プロセスが予期しない方法で終了する場合は、notify
に注意してください。 実行されません
トラップの設定
プロセスは異なる意味の信号によって通知され、適切に反応できます
#!/bin/bash
process
function finish {
notify $?
}
trap finish EXIT
どの通知を念頭に置いているのか明確ではありません。本質的には、もちろん「ベル」を鳴らすものなら何でもかまいません。多くのための1つ。 notify-send
libnotify
から
$ process; notify-send "process finished with status $?" &
Bash がこれを行います。プロセスが終了すると、制御を戻して通知し、終了ステータスを特別な変数 $?
に保存します。 .おおよそ次のようになります:
someprocess
echo $?
詳細については、特別なパラメーターに関する bash のマニュアルを参照してください。
でも、待っている間に他の仕事をしたいと思っていると思います。 bash では、次のようにできます:
someprocess &
otherwork
wait %+
echo $?
someprocess &
バックグラウンドでプロセスを開始します。つまり、制御がすぐに戻り、他の作業を行うことができます。バックグラウンドで開始されたプロセスは、bash ではジョブと呼ばれます。 wait
指定されたジョブが終了するのを待ってから、そのジョブの終了ステータスを返します。ジョブは %n
によって参照されます . %+
最後に開始されたジョブを参照します。詳細については、ジョブ制御に関する bash のマニュアルを参照してください。
本当に PID が必要な場合は、次のようにすることもできます:
someprocess &
PID=$!
otherwork
wait $PID
echo $?
$!
最後に開始されたバックグラウンド プロセスの PID を含む特別な変数です。