我有一个进程在 PID 20371 上运行(nohup python test.py
),执行大约需要 10 个小时,nohup
当这个命令完成时,我怎样才能运行另一个命令。即该进程现在正在运行,我想发出一个命令,以便虚拟机在完成后自动使用
答案1
如果您仍有权访问启动该进程的 shell nohup
,则可以使用wait
内置命令。要在进程完成后运行某些操作,您可以执行以下操作:
wait 20371 && newCommand
如果您无权访问父 shell,wait
则无法使用,因此需要采用不同的方法:
while kill -0 20371; do sleep 2; done && newCommand
这将运行一个循环,每两秒检查一次具有该 PID 的命令是否仍在运行。如果没有运行,它将启动下一个命令。
重要的:无法 100% 保证这是正确的进程。有可能(尽管可能性不大)该进程可能完成并且其 PID 在两次检查之间被另一个进程重用。
解决所有这些问题的一个更好的方法(您应该习惯这种方法)是使用类似screen
或 的解复用器tmux
连接到您的服务器并在该会话中运行命令。这样,就不需要了nohup
,即使您注销,您的命令仍会继续运行。