【跪求解答】孤儿进程组SIGHUP信号问题
本帖最后由 pang68599 于 2014-10-22 20:50 编辑UNIX Like 中 在父进程终止后,进程组成为孤儿进程组,POSIX.1要求向新的孤儿进程组中处于停止状态的每一个进程发送挂断信号(SIGHUP),接着又向其发送继续信号(SIGCONT)。
我验证下不是只向孤儿进程组中的停止进程发送SIGHUP信号,孤儿进程组的所有进程都能收到SIGHUP信号,不知道是不是我理解错了。
下面是我的实验代码不知道是不是我理解错误了?#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>
#include <setjmp.h>
#include <termios.h>
void sig_hup1(int signo) {
printf("no:%d,pid:%d,ppid:%d\n",signo,getpid(),getppid());
_exit(0);
}
int chapter9_5() {
pid_t pid = 0;
if(0 > (pid = fork())) {
printf("error\n");
}else if(0 == pid){
if(0 > (pid = fork())) {
printf("error\n");
}else if(0 == pid){
signal(SIGHUP,sig_hup1);
printf("cc1 pid[%d],ppid[%d],tc[%d],pgrg[%d],sid[%d]\n",getpid(),getppid(),tcgetpgrp(STDIN_FILENO),getpgrp(),getsid(0));
while (1) ;
exit(0);
}
signal(SIGHUP,sig_hup1);
printf("c1 pid[%d],ppid[%d],tc[%d],pgrg[%d],sid[%d]\n",getpid(),getppid(),tcgetpgrp(STDIN_FILENO),getpgrp(),getsid(0));
exit(0);
}
if(0 > (pid = fork())) {
printf("error\n");
}else if(0 == pid){
if(0 > (pid = fork())) {
printf("error\n");
}else if(0 == pid){
signal(SIGHUP,sig_hup1);
printf("cc2 pid[%d],ppid[%d],tc[%d],pgrg[%d],sid[%d]\n",getpid(),getppid(),tcgetpgrp(STDIN_FILENO),getpgrp(),getsid(0));
while (1) ;
exit(0);
}
signal(SIGHUP,sig_hup1);
kill(getpid(),SIGSTOP);
printf("c2 pid[%d],ppid[%d],tc[%d],pgrg[%d],sid[%d]\n",getpid(),getppid(),tcgetpgrp(STDIN_FILENO),getpgrp(),getsid(0));
while (1) ;
exit(0);
}
sleep(10);
printf("f1 pid[%d],ppid[%d],tc[%d],pgrg[%d],sid[%d]\n",getpid(),getppid(),tcgetpgrp(STDIN_FILENO),getpgrp(),getsid(0));
return 0;
}f1 -- (fork) -+--- c1 ---(fork) --- cc1
|--- c2 ---(fork) --- cc2
c1先结束,后f1结束,c2停止,但是c2,cc1,cc2都收到了SIGHUP信号
输出:
c1 pid,ppid,tc,pgrg,sid
cc1 pid,ppid,tc,pgrg,sid
cc2 pid,ppid,tc,pgrg,sid
f1 pid,ppid,tc,pgrg,sid
no:1,pid:2439,ppid:1
no:1,pid:2440,ppid:2438
no:1,pid:2438,ppid:1
跪求大侠帮解答啊:shock: f1是进程组长
f1终止,向同组成员cc1,c2,cc2发送SIGHUP 没错啊,书上只是没有详细说而已。如果某个进程组成成为孤儿进程组,并且此孤儿进程组里面有处于stop状态的进程,那么会向此进程组先发送SIGHUP信号,再发送SIGCONT(是这样拼写的吧……)如果进程没有定义对SIGHUP信号的处理函数,那就妥妥的挂了 王华_ 发表于 2014-10-26 09:35 static/image/common/back.gif
没错啊,书上只是没有详细说而已。如果某个进程组成成为孤儿进程组,并且此孤儿进程组里面有处于stop状态的 ...
明白了 谢谢!
页:
[1]