天天看点

Linux:让进程在后台可靠运行的几种方法

详情:https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/index.html

很多时候,我们都是通过ssh客户端连接Linux服务器,再提交任务的。

有些任务可能会执行很长时间,这时候就需要把任务提交到后台执行。

如果用以下方式提交任务,在断开ssh连接后,任务也会被终止:

我们的目的是:在我们断开ssh连接后,任务继续后台执行,下面介绍几种方法。

一、使用

nohup

命令

# 日志会输出到./nohup.log
nohup command [args] &

# 可以指定日志输出位置
nohup command [args] >> out.log 2>&1 &
           

使用

nohup

提交的进程,在ssh连接断开之前其父进程是当前shell进程,ssh断开后,父进程PID变为1。

要点:

  1. &

    符号不能省略;
  2. nohup

    命令执行后,最好用

    exit

    命令退出ssh连接,而不要直接关掉(我使用xshell工具,直接关掉ssh窗口,

    nohup

    提交的任务有可能一同被关掉)。

二、使用

setsid

命令

setsid command [args] >> out.log 2>&1
           

使用

setsid

提交的进程,其父进程PID为1,所以关闭当前shell并不会影响到任务。

三、使用

screen

命令

  • screen -dmS session_name

    来建立一个处于断开模式下的会话(并指定其会话名)。
  • screen -list

    列出所有会话。
  • screen -r session_name

    来重新连接指定会话。
  • 用快捷键

    CTRL-a

    d

    来暂时断开当前会话。

screen

使用帮助请参考文档。

继续阅读