Linux下让进程在后台可靠运行的方法

在登录到Linux服务器后运行某程序,之后断开连接,那之前运行的程序就会被中止掉。这是由于新进程默认都是当前进程的子进程,断开连接关闭当前终端就会把它的所有子进程都结束掉。不过很多时候我们需要让程序稳定的一直运行下去,这时候就需要使用一些方法来处理此问题了。IBM有一篇很好的文章深入探讨了此问题,本文就是对它的简化总结:

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

下文使用python test.py作为示例命令。

nohup &

nohup用于让提交的命令忽略hangup信号:

1
# nohup python test.py

一般同时加上&把命令放到后台运行

1
# nohup python test.py &

setsid

setsid的作用是在一个新的session中运行命令:

1
# setsid python test.py

提交的新进程的父进程会是init,即PPID=1

( &)

1
# (python test.py &)

提交的新进程的父进程也是init

disown

disown用于让某个已经在运行的程序忽略hangup信号,先将此任务放入后台中运行,之后使用如下命令即可:

1
# disown -h %jobspec

其中jobspec是任务的作业号。

screen

screen用于运行很多需要放到后台中稳定运行的命令时使用,用法如下:

1
2
3
4
# screen -dmS newScreen
# screen -list
# screen -r newScreen
# python test.py

详细说明见IBM的原始文章。另外,在Ubuntu下,默认是没有安装screen的,使用命令apt-get install screen进行安装即可。