Linux系统编程————wait进程回收

进程回收

        进程回收函数wait只要是为了防止出现僵尸进程

进程回收函数:wait(阻塞函数)

函数原型:pid_t wait(int* status);    

返回值:

        =-1:返回失败,已经没有子进程了;
        >0:回收的是子进程对应的pid。

参数:判断子进程是如何死的(正常退出/被信号杀死)

        正常结束:
        WIFEXITED(status):    >0 正常结束
        WEXITSTATUS(status);  上述宏>0时,调用此宏获取进程退出状态
 
        信号结束:
        WIFSIGNALED(status): >0 异常终止(信号)
        WTERMSIG(status);     上述宏>0时,调用此宏获取终止进程的信号编号

注意事项:调用一次wait只能回收一个子进程。

例:

int main()
{
	pid_t pid = fork();
	//wait(NULL);//若不关心退出状态,则将参数置为NULL
	
	if(pid == 0)
	{
		while(1)
		{
			sleep(2);//子进程睡眠2秒,判断父进程是否等待子进程退出
		}
		printf("child_pid=%d,ppid=%d\n",getpid(),getppid());
	}
	else if(pid > 0)
	{
		int status;
		pid_t wpid = wait(&status);
		//判断子进程是否正常退出
		if(WIFEXITED(status))
		{
			printf("exit val:%d\n",WEXITSTATUS(status)); 
		}
		//判断子进程是否被信号杀死
		if(WIFSIGNALED(status)) 
		{
			printf("exit by signal:%d\n",WTERMSIG(status));
		}
		
		printf("dide child pid=%d\n",wpid);
	}
	return 9;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值