- 论坛徽章:
- 0
|
新手看apue,想验证下父进程结束后,系统向孤儿进程组中处于停滞状态的进程发送挂断信号(SIGHUP)、继续信号(SIGCONT),可为什么打印出来SIGCONT在前呢?
static void
sig_hup(int signo)
{
printf("SIGHUP received, pid = %d\n", getpid());
fflush(stdout);
sleep(1);
}
static void sig_cont(int signo)
{
printf("SIGCONT recevied,pid = %d\n", getpid());
fflush(stdout);
sleep(1);
}
static void
pr_ids(char *name)
{
printf("%s: pid = %d, ppid = %d, pgrp = %d, tpgrp = %d\n",
name, getpid(), getppid(), getpgrp(), tcgetpgrp(STDIN_FILENO));
fflush(stdout);
}
int
main(void)
{
char c;
pid_t pid;
pr_ids("parent");
if ((pid = fork()) < 0) {
printf("fork error");
} else if (pid > 0) { /* parent */
sleep(5); /* sleep to let child stop itself */
exit(0); /* then parent exits */
} else { /* child */
pr_ids("child");
signal(SIGHUP, sig_hup); /* establish signal handler */
signal(SIGCONT,sig_cont);
kill(getpid(), SIGTSTP); /* stop ourself */
pr_ids("child");/* prints only if we're continued */
if (read(STDIN_FILENO, &c, 1) != 1)
printf("read error from controlling TTY, errno = %d\n",
errno);
exit(0);
}
}
运行结果如下:
[Nsos5 apue.2e]# ./a.out
parent: pid = 18074, ppid = 30092, pgrp = 18074, tpgrp = 18074
child: pid = 18075, ppid = 18074, pgrp = 18074, tpgrp = 18074
[Nsos5 apue.2e]# SIGCONT recevied,pid = 18075
SIGHUP received, pid = 18075
child: pid = 18075, ppid = 1, pgrp = 18074, tpgrp = 30092
read error from controlling TTY, errno = 5
各位大大有什么好的方法验证这两个信号的先后顺序?? |
|