如何向已经运行的进程添加额外的“关闭”命令?

如何向已经运行的进程添加额外的“关闭”命令?

我经常忘记&& 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 脚本来运行这两个进程:

MyShell脚本.txt:

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

将其保存到启动给定进程的目录中后,执行以下操作:

chmod +x MyShellScript.txt

然后,当您想要运行该命令时,只需输入./MyShellScript.txt,它就会为您完成这两项操作。

相关内容