如何让我们的后台运行进程不受Terminal关闭的影响

来源:互联网 发布:gta5 知乎 编辑:程序博客网 时间:2024/05/16 08:08

当我们需要在远程测试环境中运行诸如压力测试等需要后台运行的程序,但是当你关闭了远程登录的窗体时,却意外的也关闭了你的后台程序。这个问题的原因是:后台执行的进程,其父进程还是当前终端shell的进程,而一旦父进程退出,则会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。你可以使用下面的命令解决这个问题nohup ./test.sh &

SIGUP 

  unix中进程组织结构为 session 包含一个前台进程组及一个或多个后台进程组,一个进程组包含多个进程。
  一个session可能会有一个session首进程,而一个session首进程可能会有一个控制终端。
  一个进程组可能会有一个进程组首进程。进程组首进程的进程ID与该进程组ID相等。
  这儿是可能会有,在一定情况之下是没有的。
  与终端交互的进程是前台进程,否则便是后台进程
  SIGHUP会在以下3种情况下被发送给相应的进程:
  1、终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用 & 符号提交的进程)
  2、session首进程退出时,该信号被发送到该session中的前台进程组中的每一个进程
  3、若夫进程退出导致进程组成为孤儿进程组,且该进程组中有进程处于停止状态(收到SIGSTOP或SIGTSTP信号),该信号会被发送到该进程组中的每一个进程。
  系统对SIGHUP信号的默认处理是终止收到该信号的进程。所以若程序中没有捕捉该信号,当收到该信号时,进程就会退出。