回答:
次のようなことができます。これにより、プロセスが5秒ごとに実行されているかどうかが確認され、適切なアクションが実行されます。
while true; do
  if ps -ef | grep -q '[l]ong-running-process'; then
    sleep 5
  else
    sudo poweroff
  fi
donegrep式の角括弧に注意してください。これはgrep、psリストに含まれるプロセスが一致しないようにするためです。単一の文字を角括弧で囲むだけで十分です。
私はいつもこれをしています。
&&命令をするのを忘れたことに気づく。fg && shutdown -h now先:
または、次のような他の回答で提案されているようにポーリングすることもできます。
while ps -p $PID ; do sleep 5 ; done ; shutdown -h nowpidがわかっている場合、これを実行できます。
while ps -p $PID; sleep 5; done; shutdown -h nowpsからエコーなしで実行するには、次のようにします。
while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now最後に、出力なしでバックグラウンドで実行します。
(while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now ) &スコットのソリューションは優れたソリューションですが、これにより、grep既にpidを知っている場合は何度も繰り返す必要がなくなります。また、入力する方がはるかに高速です。
&&前のコマンドが成功した場合にのみ実行されることを理解してください。コマンドが失敗した場合でも実行する場合は、;代わりに使用します。