- 论坛徽章:
- 0
|
本帖最后由 viki345 于 2014-05-28 21:15 编辑
平常做事的时候,当ssh到服务器执行一个服务程序的时候,要setsid。因为你即使将程序放到后台执行,终端关闭,就会给所有的进程发送sighup信号。
**************
但是,今天我看《apue 2》p237,说“先发送sighup信号给控制首进程,然后控制首进程将sighup发送给前台进程组中的所有进程”
??????????
***********************
然后,我就写了端代码试了下,果然如此。
当我把ssh断开的时候,后台的进程依然存在。- 1 #include <stdio.h>
- 2 #include <signal.h>
- 3 #include <stdlib.h>
- 4 void sighup(int signo)
- 5 {
- 6 FILE *fp;
- 7 fp=fopen("/tmp/test","w");
- 8 if(signo==SIGHUP)
- 9 fprintf(fp,"%d get sighup",getpid());
- 10 fclose(fp);
- 11 exit(0);
- 12 }
- 13 int main()
- 14 {
- 15 // signal(SIGHUP,sighup);
- 16 int pid;
- 17 pid=fork();
- 18 if(pid==0)
- 19 {
- 20
- 21 exit(0);
- 22 }
- 23 else
- 24 if(pid > 0)
- 25 {
- 26 while(1)
- 27 {
- 28 sleep(1);
- 29 }
- 30 }
- 31 }
复制代码 1.当不捕获sighup的时候,将程序放到后台,断开ssh,程序依然存在。
我用的是debian 6.0
内核是 |
|