プロセスが完了したら何かをしてください

プロセスが完了したら何かをしてください

時には次のようなことをしたいときがあります。

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

(私はzshDebian 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

おすすめ記事