在 nohup 上运行顺序命令

在 nohup 上运行顺序命令

我有一个进程在 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,即使您注销,您的命令仍会继续运行。

相关内容