Linux 进程后台运行的几种方法

简要tips:

当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,让进程忽略 HUP 信号或者让进程运行在新的会话里从而成为不属于此终端的子进程.解决方案包括:

nohup
只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上 &来将命令同时放入后台运行,也可用 >filename 2>&1 来更改缺省的重定向文件名。

#如
nohup ping www.ibm.com &

setsid
换个角度,进程不属于接受 HUP 信号的终端的子进程,那么自然也就不会受到 HUP 信号的影响了。setsid 就能帮助我们做到这一点.

setsid ping www.ibm.com

&

当将"&"放入“()”内之后,我们就会发现所提交的作业并不在作业列表中,也就是说,是无法通过 jobs 来查看的。新提交的进程的父 ID(PPID)为1(init 进程的 PID),并不是当前终端的进程 ID。因此并不属于当前终端的子进程,从而也就不会受到当前终端的 HUP 信号的影响了

(ping www.ibm.com &)

disown
未加任何处理就已经提交了命令,该如何补救才能让它避免 HUP 信号的影响?

disown -h jobspec 来使某个作业忽略HUP信号
disown -ah 来使所有的作业都忽略HUP信号
disown -rh 来使正在运行的作业忽略HUP信号

disown -h %1

screen
如果有大量这种命令需要在稳定的后台里运行,如何避免对每条命令都做 nohup 操作,screen 能解决这个问题,使用了 screen 后,在 screen 中运行的进程都是 screen 进程的子进程,而 screen 进程的父进程是 1,不是用户进程

screen -dmS session name来建立一个处于断开模式下的会话(并指定其会话名)。
screen -list 来列出所有会话。
screen -r session name来重新连接指定会话。

你可能感兴趣的:(linux)