当我关闭 SSH 终端时 nohup 结束,并且在运行时不会出现在 ps/job 上

当我关闭 SSH 终端时 nohup 结束,并且在运行时不会出现在 ps/job 上

我有一个 AWS EC2 Ubuntu 20.04 实例,通过 puTTY SSH 访问。通过以下方式运行 Python 进程开放MPI通过以下命令在非 root 上:

nohup mpirun python3 job.py

当外壳打开时,它可以正常运行。尽管使用psandjob没有显示进程,但我可以通过 nohup.out 和不断变化的文件系统看到它在运行数小时后仍在工作。

当我关闭 shell 时,nohup 进程结束。我可能还应该注意到,当我运行上面的 nohup 命令时,我无法再输入任何内容(光标变为空白)。因此,当我跑到ps上面时job,我必须打开第二个外壳。我以前从未使用过 nohup 并认为这是不正常的。

我调查了 nohup.out 文件是否有错误,但发现没有写入任何内容。

所以总而言之:

  1. 关闭 SSH 实例(puTTY)结束 nohup 进程

  2. ps 和 job 没有列出 nohup 进程,即使我知道它正在运行

如果需要的话我可以回答更多问题

答案1

jobs只能显示当前 shell 的作业。

ps 显示与当前用户具有相同有效用户 ID 且与调用者具有相同控制终端的进程。您需要例如ps -e查看其他进程(但不一定是操作系统中的所有进程)。

如果你跑

nohup something … &

然后您将能够在同一 shell 中运行jobsps。不要期望看到nohup。它的任务是以特定方式运行something,它不需要持续。期望看到something

因此,您的进程可能幸存下来,而您只是假设它已经死亡。又或许它真的死了。看为什么进程被杀死nohup回答其中提到了两种可能性:

  • KillUserProcesses=yeslogind.conf(系统);
  • 或者生成的进程实现自己的处理程序,SIGHUP该处理程序会覆盖nohup.

更多这里:nohupdisown之间的区别&。如果我理解正确,disown如果生成的进程实现了自己的处理程序,则可以提供帮助SIGHUP。像这样使用它:

nohup something … &
disown

相关内容