如何在已運行的進程中新增額外的「關閉」命令?

如何在已運行的進程中新增額外的「關閉」命令?

我經常忘記添加&& 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暫停進程並返回 shell。
  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。這是為了確保該grep進程在清單中結束時不會被匹配ps。用方括號包圍任何單一字元就足夠了。

答案4

寫一個 shell 腳本來執行這兩個進程:

MyShellScript.txt:

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

將其保存在啟動給定進程的目錄中後,執行以下操作:

chmod +x MyShellScript.txt

然後,當您想執行該命令時,只需鍵入即可./MyShellScript.txt,它會為您完成這兩件事。

相關內容