从nohup源码就可以看到,其实nohup只做了3件事情
1.dofile函数将输出重定向到nohup.out文件
2.signal函数设置SIGHUP信号处理函数为SIG_IGN宏(指向sigignore函数),以此忽略SIG_HUP信号
3.execvp函数用新的程序替换当前进程的代码段、数据段、堆段和栈段。
execvp 函数执行后,新程序(并没有fork进程)会继承一些调用进程属性,比如:进程id、会话id,控制终端等
登录连接断开之后
在终端关闭后,nohup起到类似守护进程的效果,但是跟传统的守护进程还是有区别的
1、nohup创建的进程工作目录是你执行命令时所在的目录。
2、0 1 2 标准输入 标准输出 标准错误 指向nohup.out文件。
3、nohup创建的进程组中,除首长进程的父进程id变为1之外,其余进程依然保留原来的会话id、进程组id、父进程id,都保持不变。