【Linux】回收子进程—wait/waitpid

本文介绍了Linux中的孤儿进程和僵尸进程,并详细解析了wait和waitpid函数在回收子进程、释放资源以及获取子进程状态上的作用。通过wait函数,父进程可以阻塞等待、回收资源并获取子进程的退出状态,包括正常结束和异常终止的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、孤儿进程

       父进程先于子进程结束,则子进程称为孤儿进程,子进程的父进程成为  init 进程,称 init 进程领养进程孤儿进程,init 进程称为孤儿院。

    

#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>


int main(void)
{
	pid_t pid;

	pid = fork();

	if( pid == -1 )
	{
		perror("fork");
		exit(1);
	}
	else if( pid > 0)
	{
		printf("I am parent,my pid = %d\n",getpid());

		sleep(9);

		printf("--------------parent going to die------------------\n");
	}
	else
	{
		while(1)
		{
			printf("I am child,my parent pid = %d\n",getppid());

			sleep(1);	
		}
	}

	return 0;
}




 

        此时程序中的打印信息会一直进行打印,即使你按下 ctrl+c   也不会退出正在执行的程序 ./orpan;此时需要使用 ps -ef ,查看正在打印的程序信息;然后使用 kill -9  + 进程ID(./orphan 的ID)

二、 僵尸进程

                  进程终止,父进程尚未回收,子进程残留资源(PCB)存放于内核中,变成僵尸进程。

        注意:

                 僵尸进程是不能使用 kill 命令清除掉的。因为 kill 命令只是用来终止进程的,而僵尸进程已经终止。


#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>


int main(void)
{
	pid_t pid;

	pid = fork();

	if( pid == -1 )
	{
		perror("fork");
		exit(1);
	}
	else if( pid > 0)
	{
		printf("I am parent,my pid = %d\n",getpid());

		sleep(9);

		printf("--------------parent going to die------------------\n");
	}
	else
	{
		while(1)
		{
			printf("I am child,my parent pid = %d\n",getppid()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值