我在 Windows 上通过 SecureCRT 在远程 Linux 上运行 Gaussian 时遇到问题。
Gaussian在运行时会生成不同的子可执行文件(“链接”)。例如,我通过运行开始高斯nohup g09 < test.in > test.out 2> test.out &,并g09会产卵不同linkS,从而为l301.exe和l502.exe在特定的情况下。
当我连接到远程 Linux 机器并使用nohup ${Path_Of_Gaussian}/g09 < jobname.in > jobname.out 2> jobname.out &以下命令运行 Gaussian 时:
如果我通过键入exit并按退出 shell Enter,我可以退出而 Linux 上的 Gaussian 继续运行(特定可执行文件的名称取决于特定时间)。
如果我关闭计算机电源(然后 SecureCRT 将关闭),Linux 上的 Gaussian 会被杀死并抱怨“挂断”。
如果我输入exit并按退出Enter,然后登录,我可以关闭计算机,Linux 上的 Gaussian 继续运行。
jlliagre的答案在这种情况下不起作用。
以一个简单的可执行文件为例,它什么都不做(即,不处理输入和输出)但休眠 10 分钟。当我运行它时nohup ${Path_Of_Executable}/executable &:
如果我通过键入exit并按退出 shell Enter,我可以退出并且可执行文件继续在 Linux 上运行。
如果我关闭计算机电源(然后 SecureCRT 将关闭),在 Linux 上运行的可执行文件将被杀死。
如果我通过键入exit并按退出Enter,然后登录,我可以关闭计算机(然后 SecureCRT 将关闭)并且 Linux 上的可执行文件继续运行。
正如jlliagre知识渊博的答案,如果我运行nohup ${Path_Of_Executable}/executable </dev/null >/dev/null 2>&1 &,我可以在 Linux 上的可执行文件继续运行时关闭电源。
换句话说,为什么在远程机器上运行的 Gaussian 会nohup在本地计算机在退出 shell 之前关闭电源时被杀死?
根据您描述问题的方式,听起来 Guassian 仍然与它所产生的 shell 存在一些联系。
除了运行之外,您还可以尝试的另一件事nohup是运行disown -a,尽管这应该执行相同的操作,断开所有生成的进程接收 SIGHUP 的连接。
另一个想法是像这样调用 Guassian。
这可以防止 Guassian 在本地计算机失去连接时被终止。
我也遇到过与此类似的应用程序,我通常只是伸手去拿screen和/或tmux运行 Screen 内的远程系统上的应用程序,而不是太多地把头撞在桌子上。
这可以更好地保护进程,并且具有稍后能够重新连接的额外好处。