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進程會收留孤兒進程,變成孤兒進程的父進程

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