菜鸟开始时不懂窗口关闭时,jobs程序也被关闭,原因当然是SIGHUP信号。下面分析SIGHUP信号的特点,以及如何使得程序不被关闭。
SIGHUP信号
SIGHUP是unix中进程组织结构为 session 包含一个前台进程组及一个或多个后台进程组,一个进程组包含多个进程。
一个session可能会有一个session首进程,而一个session首进程可能会有一个控制终端。
一个进程组可能会有一个进程组首进程。进程组首进程的进程ID与该进程组ID相等。
SIGHUP会在以下3种情况下被发送给相应的进程:
1、终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用 & 符号提交的进程)
2、session首进程退出时,该信号被发送到该session中的前台进程组和后台进程组中的每一个进程
3、若进程的退出,导致一个进程组变成了孤儿进程组,且新出现的孤儿进程组中有进程处于停止状态,则SIGHUP和SIGCONT信号会按顺序先后发送到新孤儿进程组中的每一个进程。
系统对SIGHUP信号的默认处理是终止收到该信号的进程。所以若程序中没有捕捉该信号,当收到该信号时,进程就会退出。
两种方法
方法一: Screen
使用例子https://www.ibm.com/developerworks/cn/linux/l-cn-screen/
方法二: nohup
用途:不挂断地运行命令。
语法:nohup Command [ Arg … ] [ & ]
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。
如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
退出状态:该命令返回下列出口值:
126 可以查找但不能调用 Command 参数指定的命令。
127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
&
用途:在后台运行
一般两个一起用
nohup command &
eg:
1 |
|
进程号7585
查看运行的后台进程
(1)jobs -l
jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)
(2)ps -ef
1 |
|
a:显示所有程序
u:以用户为主的格式来显示
x:显示所有程序,不以终端机来区分