Linux进程编程(三)

Linux进程(三)

等待子进程退出

父进程等待子进程退出,并收集子进程的退出状态

在这里插入图片描述

子进程状态不收集会变成僵尸进程。

等待函数

在这里插入图片描述

wait函数

  1. 如果其所有子进程都还在运行,则阻塞
  2. 如果一个子进程已终止,正等待父进程获取其终止状态,取得该子进程的终止状态立即返回
  3. 如果它没有任何子进程,则立即出错返回

代码案例

int cnt = 0;
int status = 10;

pid = fork();

if(pid>0)
{
	wait(&status);	//把退出状态存放到status里面
	printf("child quit ,child status = %d\n",WEXITSTATUS(status));		//利用宏来解析出状态值
	while(1)
	{
		printf("cnt=%d\n",cnt);
		printf("this is father print,pid=%d\n",getpid());
		sleep(1);
	}
}
else if(pid==0)
{
	while(1)
	{
		printf("this is child print,pid=%d\n",getpid());
		sleep(1);
		cnt++;
		if(cnt==3)
		{
			exit(3);
		}
	}
}

return 0;

部分参数解析:
status参数:是一个整型数指针
非空:
子进程退出状态放在它所指向的地址中
空:
不关心状态

waitpid函数

在这里插入图片描述

第一个参数是fork的返回值,前面讲到fork返回值在父进程中返回的是子进程的id

第三个参数常用:WNOHANG不阻塞

孤儿进程

1.父进程如果不等待子进程退出,在子进程结束之前就结束了,此时的子进程叫做孤儿进程

2.Linux避免系统存在过多孤儿进程,init进程会收留孤儿进程,变成孤儿进程的父进程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章