一般远程登陆LINUX,在网络断开及注销等情况下,进程会接收到HUP信号,从而导致进程被关闭。解决方案一个是让进程忽略该信号,另一个是让进程运行在新 会话中,使其不属于此终端的子进程。
下面是几种实现进程后台运行的方法:
nohup是最简单的方法,该命令用途就是让提交的命令忽略hangup信号。使用方法为在需要处理的命令前加nohup即可,标准输出和错误会被重定向到nohup.out文件,也可以更改默认的重定向文件名。一般我们可在结尾添加”&”来将命令同时放入后台运行。
nohup COMMAND &
注意:需要同时按两次回车。
如果运行的程序不属于接受HUP信号的终端子进程,同样将不会受到HUP影响,setsid即可实现该功能。使用方法为在提交的命令前加setsid即可,进程将运行在一个新的session中。
通过setsid运行的进程的父进程为1,即init进程,并不是类似nohup的前端进程ID。
setsid COMMAND
subshell有个小技巧,shell中将命令放在()中,将会让命令在shell的子进程中运行,当我们将&也放入到()内之后,所提交的命令的父进程为1,即init进程。
(COMMAND &)