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

程序清单 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){//parent
		sleep(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=4458
child:pid=4459,ppid=4458,pgrp=4458,tpgrp=4458
SIGHUP recevied,pid=4459
child:pid=4459,ppid=1,pgrp=4458,tpgrp=3329
read error from controlling TTY,errno=5
asd@asd-desktop:~/workspace/test/src$ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值