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


11

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


&&前のコマンドが成功した場合にのみ実行されることを理解してください。コマンドが失敗した場合でも実行する場合は、;代わりに使用します。
ゾーク

回答:


13

出力を介してすべてのプロセスとgrepをリストするためにpsを繰り返し実行する必要はありません。ctrl-Zを使用してプロセスをバックグラウンドで実行します

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

他のバックグラウンドジョブを実行している場合、ctrl-zを押すと、[1]の代わりに別のjobspecが与えられます。その場合、代わりにそれを使用してください。


3

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

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

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


+1が機能するため。私はカントーをやったであろう方法ではありません。
ゾーク

@Zoke:別の方法があれば、興味があります。
スコットセベランス

回答も投稿しました。必要に応じて確認してください。
ゾーク

kill -0(pid)を使用して、プロセスを強制終了せずにプロセスの存在を確認することもできます。
ふわふわ

3

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

  1. プロセスを開始します。
  2. 私が自分の&&命令をするのを忘れたことに気づく。
  3. ヒットCtrl+ Zプロセスを中断し、シェルに戻ります。
  4. 実行fg && shutdown -h now先:
    1. 中断したプロセスをフォアグラウンドして再開します。
    2. 次に、終了後、実行したいものを実行します。

または、次のような他の回答で提案されているようにポーリングすることもできます。

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

それはすぐにシャットダウンします。
-psusi

fgはすぐに完了するため、
...-psusi

@psusiいいえ、それはありません
ウォーキングウィキ

@WalkingWiki、おかしい、あなたは正しい。2012年にこれをテストし、すぐに完了したことを誓います。
psusi

1

pidがわかっている場合、これを実行できます。

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

psからエコーなしで実行するには、次のようにします。

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を知っている場合は何度も繰り返す必要がなくなります。また、入力する方がはるかに高速です。


0

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

MyShellScript.txt:

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

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

chmod +x MyShellScript.txt

次に、コマンドを実行する場合は、入力するだけで./MyShellScript.txt両方が実行されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.