我习惯disown
通过 SSH 运行长时间运行的进程。例如我运行以下程序:
vmd -e script.tcl > out.txt &
然后我用它disown -a
把它从外壳上拆下来。当我重新连接终端时,out.txt
显示程序已完成。但是,它显示 vmd ( vmd>
) 的命令提示符。 VMD 是一个运行 TCL 脚本进行化学模拟的程序。你可以假设它是类似 python 的东西,有自己的 shell
http://www.ks.uiuc.edu/Training/Tutorials/vmd/tutorial-html/node8.html
一段时间后,由于运行进程的限制,我无法连接到 ssh ( fork retry: Resource temporary unavailable
)。首先,我想知道如何杀死那些处于等待状态的否认进程。
其次,我想知道如果我vmd
通过放在exit
my 的末尾来退出程序script.tcl
,是否可以解决上述问题以供将来使用?
答案1
有不止一种方法可以做到这一点。 (TM值)
解决方案 1(可能是最好的):将退出命令添加vmd
到脚本末尾。
解决方案 2:将vmd
命令的标准输入重定向到(或来自,取决于您的心态)空设备,如下所示:
vmd -e script.tcl > out.txt < /dev/null &
这样,当vmd
脚本完成并尝试从标准输入读取下一个命令时,它将收到“文件结尾”并退出。
解决方案 3:使用 终止剩余vmd
进程kill
。您将需要它的 PID,您可以在 shell 启动后打印它时记下它&
,或者通过命令查找ps ax
。首先尝试kill -TERM
(默认),如果不起作用,请使用kill -HUP
.做不是使用kill -KILL
又名kill -9
.
解决方案 4:使用screen
或tmux
代替disown
.这样您就可以重新连接到正在运行的vmd
进程并输入更多命令,例如exit
.