すでに実行中のプロセスに追加の「シャットダウン」コマンドを追加するにはどうすればよいですか?

すでに実行中のプロセスに追加の「シャットダウン」コマンドを追加するにはどうすればよいですか?

定期的に&& shutdown -h now長時間実行プロセスに追加することを忘れてしまいます。shutdown -h nowコマンドを追加する方法はありますか?最初のコマンドが呼び出されましたか? 進行中のプロセスを中断することを意図したものではありません。 PID を監視することは可能でしょうか?

答え1

psを繰り返し実行してすべてのプロセスをリストし、出力をgrepする必要はありません。プロセスをCtrl-Zでバックグラウンドにしてから、

bg %1 ; wait %1 ; shutdown -h now

他のバックグラウンドジョブが実行中の場合は、Ctrl + Z を押すと [1] ではなく別のジョブスペックが提供されます。その場合は、代わりにそれを使用してください。

答え2

私はいつもこれをやっています。

  1. プロセスを開始します。
  2. 自分が命令を実行するのを忘れていたことに気が付きました&&
  3. Ctrl+ を押すZとプロセスが一時停止され、シェルに戻ります。
  4. に向かって走るfg && shutdown -h now
    1. 一時停止したプロセスをフォアグラウンドで再開します。
    2. その後、完了すると、実行したい内容が実行されます。

あるいは、他の回答で提案されているように、次のように投票することもできます。

while ps -p $PID ; do sleep 5 ; done ; shutdown -h now

答え3

次のようにすると、プロセスが 5 秒ごとに実行されているかどうかを確認し、適切なアクションを実行できます。

while true; do
  if ps -ef | grep -q '[l]ong-running-process'; then
    sleep 5
  else
    sudo poweroff
  fi
done

式内の角括弧に注意してください。これは、プロセスがリスト内に含まれていても一致しないようgrepにするためです。任意の 1 文字を角括弧で囲むだけで十分です。grepps

答え4

両方のプロセスを実行するシェル スクリプトを作成します。

MyShellScript.txt:

#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now

特定のプロセスを開始するディレクトリにこれを保存した後、次の操作を実行します。

chmod +x MyShellScript.txt

その後、コマンドを実行したいときに入力するだけで./MyShellScript.txt、両方が自動的に実行されます。

関連情報