有人问“SSH登陆服务器,在服务器以后台方式运行任务,之后退出SSH,结果放在后台运行的任务也会退出。如何让在后台运行的任务不因SSH的退出而退出?”
这个问题其实有两种情况(与是怎么退出SSH有关),如下:
1. 如果 SSH 上去,执行比如 ./somecommand & 然后 logout(Ctrl-D、和exit也行) 退出,然后再 SSH 上去看,会发现 ./somecommand 运行得好好的;
2. 如果 SSH 上去,执行 ./somecommand & 然后不是 logout退出,而是直接把 SSH 终端窗口关掉(或者类似情况比如像把本地计算机关机之类的),再 SSH 上去看就会发现 ./somecommand 没了。
可以通过以下方式验证:
远程SSH:
这样tail会不断打印输入,然后远程SSH退出,可以发现tail仍然有新的输出产生,表明后台任务没有结束。
通过pstree查看进程树也可以看到:
&后台运行,logout退出前它们的进程树结构如下:
logout主动退出后进程树是这样如下:
所以不主动logout退出直接断开连接会导致后台任务结束,但主动logout退出不会结束后台任务。
No comments:
Post a Comment