定期的に、&& shutdown -h now
を長期実行プロセスに追加するのを忘れています。 shutdown -h now
コマンドを追加する方法はありますか後最初のコマンドが呼び出されましたか?進行中のプロセスを中断することは意図されていません。たぶん、PIDを見ることができますか?
Psを繰り返し実行してすべてのプロセスをリストし、出力全体をgrepする必要はありません。 ctrl-Zでプロセスをバックグラウンドで実行します
bg %1 ; wait %1 ; shutdown -h now
他のバックグラウンドジョブを実行している場合、ctrl-zを押すと、[1]の代わりに別のjobspecが与えられます。その場合は、代わりにそれを使用してください。
次のようなことができます。これにより、プロセスが5秒ごとに実行されているかどうかが確認され、適切なアクションが実行されます。
while true; do
if ps -ef | grep -q '[l]ong-running-process'; then
sleep 5
else
Sudo poweroff
fi
done
grep
式の角括弧に注意してください。これは、grep
リストに含まれる場合にps
プロセスが一致しないようにするためです。単一の文字を角括弧で囲むだけで十分です。
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 ) &
スコットのソリューションは優れたソリューションですが、これにより、既にpidを知っている場合はgrep
を何度も繰り返す必要がなくなります。また、入力する方がはるかに高速です。
私はいつもこれをしています。
&&
コマンドを実行するのを忘れたことに気付きます。fg && shutdown -h now
を実行して:または、次のような他の回答で提案されているようにポーリングできます。
while ps -p $PID ; do sleep 5 ; done ; shutdown -h now
両方のプロセスを実行するシェルスクリプトを作成します。
MyShellScript.txt:
#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now
これを特定のプロセスを開始するディレクトリに保存した後、次を実行します。
chmod +x MyShellScript.txt
次に、コマンドを実行する場合は、./MyShellScript.txt
と入力するだけで、両方が実行されます。