1、nohup
nohup 无疑是我们首先想到的办法。​​​顾名思义​​,nohup 的用途就是让提交的命令忽略 hangup 信号。

nohup ping www.ibm.com &        ##输出内容会保存到当前目录下 nohup.out 文件中
nohup ping www.ibm.com &>/dev/null & ##丢掉输出内容
nohup ./program >/dev/null 2>log & 只输出错误日志

 

2、setsid

nohup 无疑能通过忽略 HUP 信号来使我们的进程避免中途被中断,但如果我们换个角度思考,如果我们的进程不属于接受 HUP 信号的终端的子进程,那么自然也就不会受到 HUP 信号的影响了。setsid 就能帮助我们做到这一点。

setsid ping www.ibm.com

 

3、&

这里还有一个关于 subshell 的小技巧。我们知道,将一个或多个命名包含在“()”中就能让这些命令在子 shell 中运行中,从而扩展出很多有趣的功能,我们现在要讨论的就是其中之一。

当我们将"&"也放入“()”内之后,我们就会发现所提交的作业并不在作业列表中,也就是说,是无法通过​​jobs​​来查看的。让我们来看看为什么这样就能躲过 HUP 信号的影响吧。

(ping www.ibm.com &)