孤儿进程组
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
static void
sig_hup(int signo)
{
printf("SIGHUP received,pid=%d\n",getpid());
}
static void
pr_ids(char * name)
{
printf("%s: pid=%d,ppid=%d,pgrp=%d,tpgrp=%d\n",name,getpid(),getppid(),getpgrp(),tcgetpgrp(STDIN_FILENO));
}
int
main(int argc,char * argv[])
{
char c;
pid_t pid;
pr_ids("parent");
if((pid=fork())<0)
{
perror("fork");
}
else if(pid>0)
{
sleep(10);
exit(0);
}
else
{
pr_ids("child");
signal(SIGHUP,sig_hup);
kill(getpid(),SIGTSTP);
pr_ids("child");
if(read(STDIN_FILENO,&c,1)!=1)
{
printf("read error=%d\n",errno);
}
exit(0);
}
}
运行结果:
parent: pid=5507,ppid=5301,pgrp=5507,tpgrp=5507
child: pid=5508,ppid=5307,pgrp=5507,tpgrp=5507
SIGHUP received,pid=5508
child: pid=5508,ppid=1,pgrp=5507,tpgrp=5507
read error=5
父进程终止时,子进程不是应该被放置在后台吗?为什么最后一个tpgrp还是为5507