当用户注销(logout)或者网络断开时,登录的终端会收到HUP(hangup)信号从而关闭其所有子进程。我们可以使用3个命令来实现进程后台运行。
1、nohup
nohup的用途就是让提交的命令忽略hangup信号。
举例:
nohup ./startup.sh &
后台运行tomcat
2、setsid
setsid的作用是让运行的进程不属于接受HUP信号的终端的子进程。
举例:
比如bash登录上来ppid是10627
UID PID PPID C STIME TTY TIME CMD
root 521 1 0 May21 ? 00:00:01 /usr/sbin/sshd
root 10625 521 0 00:56 ? 00:00:00 sshd: root@pts/0
root 10627 10625 0 00:56 pts/0 00:00:00 -bash
这时ping一个网址
ping www.google.com
在另一个窗口查看
ps -ef | grep ping
UID PID PPID C STIME TTY TIME CMD
root 10664 10627 0 00:57 pts/0 00:00:00 ping www.google.com
用setsid后PPID变为1(init进程ID),不会接受HUP信号
setsid ping www.google.com
ps -ef | grep ping
UID PID PPID C STIME TTY TIME CMD
root 10668 1 0 00:58 ? 00:00:00 ping www.google.com
3、screen
screen可以在后台创建会话,从而让进程在后台运行。
screen常用命令:
screen:开一个窗口
screen -r:恢复进入窗口
screen -r -D:强行进入窗口
在screen窗口内:Ctrl + A D 窗口后台运行
screen -ls:查看全部session列表
screen -d -r:连接一个screen进程,如果该进程是attached,就先踢掉远端用户再连接。
screen -D -r:连接一个screen进程,如果该进程是attached,就先踢掉远端用户并让他logout再连接