1、run a command immune(免除) to hangups
nohup Command [Arg...] [&]
nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。
如果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。
2、SIGHUP信号发送的情况
SIGHUP会在以下3种情况下被发送给相应的进程:
① 终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用&符号提交的进程)。如:ssh到一台机器, 开个vim,当关闭这个ssh会话的时候,vim就会收到 SIGHUP
② session首进程退出时,该信号被发送到该session中的前台进程组中的每一个进程
③ 若父进程退出导致进程组成为孤儿进程组,且该进程组中有进程处于停止状态(收到SIGSTOP或SIGTSTP信号),该信号会被发送到该进程组中的每一个进程。
注意:SIGHUP被发给了session leader (即shell),然后由session leader发给jobs。
3、unix中进程组织结构为session,包含一个前台进程组及一个或多个后台进程组,一个进程组包含多个进程。一个session可能会有一个session首进程,而一个session首进程可能会有一个控制终端。
一个进程组可能会有一个进程组首进程。进程组首进程的进程ID与该进程组ID相等。与终端交互的进程是前台进程,否则便是后台进程
4、示例
1)nohup command > myout.file 2>&1 &
2)nohub ./me.sh > /dev/null 2>&1
5、守护进程,进行信号处理,使用command &后,也可以达到这个目的。
6、查看信号
man -k signal | grep list
kill -l
参考
【1】 http://bbs.chinaunix.net/viewthread.php?tid=774709
http://linux.die.net/man/1/nohup
【2】 http://baike.baidu.com/view/1839401.htm
【3】 记述了一个操作nohup的细节
http://os.51cto.com/art/200912/172917.htm
【4】 Catching signals
http://linux.die.net/Bash-Beginners-Guide/sect_12_01.html
【5】 对sighup进行了很好地讨论
http://www.cnblogs.com/coldplayerest/archive/2011/08/14/2137777.html