详情:https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/index.html
很多时候,我们都是通过ssh客户端连接Linux服务器,再提交任务的。
有些任务可能会执行很长时间,这时候就需要把任务提交到后台执行。
如果用以下方式提交任务,在断开ssh连接后,任务也会被终止:
我们的目的是:在我们断开ssh连接后,任务继续后台执行,下面介绍几种方法。
一、使用 nohup
命令
nohup
# 日志会输出到./nohup.log
nohup command [args] &
# 可以指定日志输出位置
nohup command [args] >> out.log 2>&1 &
使用
nohup
提交的进程,在ssh连接断开之前其父进程是当前shell进程,ssh断开后,父进程PID变为1。
要点:
-
符号不能省略;&
-
命令执行后,最好用nohup
命令退出ssh连接,而不要直接关掉(我使用xshell工具,直接关掉ssh窗口,exit
提交的任务有可能一同被关掉)。nohup
二、使用 setsid
命令
setsid
setsid command [args] >> out.log 2>&1
使用
setsid
提交的进程,其父进程PID为1,所以关闭当前shell并不会影响到任务。
三、使用 screen
命令
screen
- 用
来建立一个处于断开模式下的会话(并指定其会话名)。screen -dmS session_name
- 用
列出所有会话。screen -list
- 用
来重新连接指定会话。screen -r session_name
- 用快捷键
CTRL-a
来暂时断开当前会话。d
screen
使用帮助请参考文档。