我经常忘记&& shutdown -h now
向长时间运行的进程添加命令。有什么方法可以添加shutdown -h now
命令后第一个命令被调用了吗?它不是为了中断正在进行的进程。也许可以观察 PID?
答案1
无需反复运行 ps 来列出所有进程并 grep 输出。使用 ctrl-Z 将进程置于后台,然后运行
bg %1 ; wait %1 ; shutdown -h now
如果您正在运行其他后台作业,则当您按 ctrl-z 时,您将获得不同的作业规范,而不是 [1]。如果是这样,请使用它。
答案2
我一直都这样做。
- 开始进程。
- 意识到我忘了执行我的
&&
命令。 - 按Ctrl+Z暂停进程并返回到 shell。
- 跑向
fg && shutdown -h now
:- 将刚刚暂停的进程置于前台并恢复。
- 然后,完成后,它将运行您想要运行的内容。
或者,您可以按照其他答案中的建议进行投票,例如:
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
,它就会为您完成这两项操作。