我在 Windows 上通过 SecureCRT 在远程 Linux 上运行 Gaussian 时遇到问题。
高斯
高斯生成不同的子可执行文件(“链接)跑步时。例如,我通过运行 启动 Gaussian nohup g09 < test.in > test.out 2> test.out &
,并且会在特定情况下g09
生成不同的link
s,例如l301.exe
和。l502.exe
运行高斯
当我连接到远程 Linux 盒子并使用以下命令运行 Gaussian 时nohup ${Path_Of_Gaussian}/g09 < jobname.in > jobname.out 2> jobname.out &
:
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 之前关闭本地计算机电源时被杀死?
答案1
想法#1——否认
根据您描述问题的方式,听起来 Guassian 仍然与它所产生的 shell 存在一些联系。
除了运行之外,您还可以尝试的另一件事nohup
是运行disown -a
,尽管这应该执行相同的操作,断开所有生成的进程接收 SIGHUP 的连接。
想法 #2 - 将其包装在另一个 Bash 中
另一个想法是像这样调用 Guassian。
- 登录到远程机器
- nohup bash
- 在这个辅助 shell 中运行 Guassian
这可能会防止 Guassian 在本地计算机失去连接时被终止。
想法 #3 - 使用 tmux 或 screen
我也遇到过与此类似的应用程序,我通常只是伸手去拿screen
和/或tmux
运行 Screen 内的远程系统上的应用程序,而不是太多地把头撞在桌子上。
这可以更好地保护进程,并且具有稍后能够重新连接的额外好处。
答案2
这应该更好地分离您的应用程序:
nohup ${PATH_OF_APPLICATION}/app </dev/null >/dev/null 2>&1 &
如果由于某种原因这仍然不起作用,请尝试:
echo ${PATH_OF_APPLICATION}/app | at now