unix高级环境编程 例子 代码实现练习 第九章:进程关系

来源:互联网 发布:淘宝卖衣服在哪找货源 编辑:程序博客网 时间:2024/05/21 17:11

程序清单 9-1 创建一个孤儿进程组 P229 

/** * 程序清单 9-1 创建一个孤儿进程组 P229  * * zy: * 注意这里是孤儿进程组,是整个进程组都是孤儿, * 我们一般称一个父进程已经终止的进程为孤儿进程,这种进程将会被init进程收养 *  * 孤儿进程组的定义还是比较绕的,如下: * 如果该组成员的父进程要么是同一个组的成员,要么是不是该组所属会话的成员。 * * 不是孤儿进程组的条件: * 该组中有一个进程,其父进程是属于同一个会话的另一个组 * * 书上到也没有讲孤儿进程组有什么用 */#include "error.c"#include "apue.h"#include <errno.h>static void sig_hug(int signo){printf("SIGHUP recevied,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));//得到前台进程id}int main() {char c;pid_t pid;pr_ids("parent");if((pid=fork())<0)err_sys("fork error");else if(pid!=0){//parentsleep(5);exit(0);}else{pr_ids("child");signal(SIGHUP,sig_hug);kill(getpid(),SIGTSTP);pr_ids("child");if(read(STDIN_FILENO,&c,1)!=1){printf("read error from controlling TTY,errno=%d\n",errno);}exit(0);}}

结果,符合预期,和书上的解释完全想对应:

asd@asd-desktop:~/workspace/test/src$ ./a.out parent:pid=4458,ppid=3329,pgrp=4458,tpgrp=4458child:pid=4459,ppid=4458,pgrp=4458,tpgrp=4458SIGHUP recevied,pid=4459child:pid=4459,ppid=1,pgrp=4458,tpgrp=3329read error from controlling TTY,errno=5asd@asd-desktop:~/workspace/test/src$ 

0 0