ssh异常断开后防止前台运行的进程退出
问题:ssh异常断开后防止运行的进程退出
这里指的ssh断开,不是指的输入命令exit的退出。 而是指因网络,或者强制关闭当前的ssh连接客户端。 此时在当前shell ssh session中后台运行的进程会终止并退出。
例子:
1. ssh登陆到某台linux server
2. sleep 500 & (&如果不输入,下面的情况也一样)
3. 此时我们因为网络问题或者手动强制关闭当前ssh 客户端。
4. 则,我们ps -ef 看下, sleep 500 的进程消失了。
当我们运行耗时的命令时,当然不希望他们因为网络问题等, 没有运行完毕。
我们希望的是,
1. ssh登陆后
2. 运行一个比较耗时的命令
3. 当因为网络问题或者手动强制关闭了ssh 链接后, 第二步运行的命令被系统进程收编,继续运行。
4. 当我们重新ssh连接到该服务器后,可以继续观察此命令的运行情况。
解决方法:
1. 最为推荐的方法。 screen命令。
a) 安装screen命令
b) screen sleep 500 后 按下ctrl+a , 然后紧接着按下d 键
亦或者直接输入命令 screen -d -m sleep 500 则, 直接detach到后台。 通过-d -m的参数,也可以用于系统启动时启动脚本命令。
detach和attach的意思, 是将此进程的标准输出附着或者取消附着到当前的console里。
c) screen -ls 可以看到目前detach的所有进程
There is a screen on:
9146..game-center-vpnclient (Detached)
1 Socket in /var/run/screen/S-root.
d) screen -r
2. nohup (但不可以attach到当前的console里, 如果作为批处理的脚本不需要和人交互的,则可以通过此方法)
nohup sleep 500 >/dev/null 2>&1 &
3. 手动干预。
a) sleep 5 &
b) 立即输入命令 exit 退出shell, 则 sleep 5 被系统进程回收。
此篇文章已被阅读2588 次