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

Sad*_*per 2 process ssh nohup amazon-ec2 mpi

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

nohup mpirun python3 job.py

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

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

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

所以总而言之:

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

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

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

Kam*_*ski 5

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

\n

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

\n

如果你跑

\n
nohup something \xe2\x80\xa6 &\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

因此,您的进程可能幸存下来,而您只是假设它已经死亡。又或许它真的死了。请参阅为什么进程被杀死nohup?答案​了两种可能性:

\n
    \n
  • KillUserProcesses=yes在logind.conf(系统);
  • \n
  • 或者生成的进程实现了自己的处理程序,SIGHUP该处理程序覆盖了nohup.
  • \n
\n

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

\n
nohup something \xe2\x80\xa6 &\ndisown\n
Run Code Online (Sandbox Code Playgroud)\n