時には次のようなことをしたいときがあります。
long_running_command; second_command
その部分を忘れてしまいました; second_command
。中断して再起動したくない場合long_running_command
(不可能な場合もあり、エラーを検出する前に長時間実行されてジョブが無駄になる可能性がある)、通常は次のようなことを行います。
ps aux | grep long_running_command
while (kill -0 <pid found above>); do sleep 1; done; second_command
(他の端末で)
動作すると、次のエラーが発生します。
kill: kill <pid> failed: no such process
そのエラーを回避する方法はありますか?それとも完了しsecond_command
たらすぐにスケジュールをつかむより良い方法はありますかlong_running_command
?
(私はzsh
Debian Jessieを使っています)。
ベストアンサー1
Debian(Linux)が与えられて1つしかないとしますlong_running_command
。
while [ -d /proc/$(pgrep -f 'long_running_command') ]; do sleep 0.1; done; second_command
またはPIDを知っている場合:
while [ -d /proc/PID-HERE ]; do sleep 0.1; done; second_command
一般的な状況の場合:
waitrun() {
while [ -d /proc/$1 ]; do sleep 0.1; done;
shift
"$@"
}
waitrun PIDHERE second_command