TCP/IP,父进程fork产生的子进程变成僵尸进程,僵尸进程产生原因,查看方法,关闭父进程回收僵尸子进程,代码中回收子进程函数wait,waitpid

本文详细阐述了TCP/IP中僵尸进程的产生原因,如何通过psau命令查看,以及使用wait和waitpid函数在父进程中的正确回收方法。重点讲解了这两个函数的用法和子进程终止信息的判断。

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

TCP/IP,父进程fork产生的子进程变成僵尸进程,就是进程产生原因,查看方法,关闭父进程回收僵尸子进程,代码中回收子进程函数wait,waitpid

O、父进程创建子进程后,子进程运行结束后退出,但子进程的进程资源并不会被操作系统释放,而是操作系统将子进程置为僵尸进程状态,等待父进程结束或主动回收。

一、僵尸进程产生原因:
1、子进程return。
2、子进程exit。
3、父进程没return或exit,父进程没有主动请求获取子进程的返回值。

二、查看僵尸进程的方法:
ps au
看运行状态是Z+的进程,就是zombie进程。

在这里插入图片描述

僵尸进程的解决方法:关闭父进程,或者在父进程中调用后面的函数wait和waitpid。

*三、wait函数,父进程主动获取某个结束的子进程的返回值。
pid_t wait(int wstatus);
返回值是子进程的pid,wstatus是子进程的返回值信息,如果父进程调用wait时没有子进程结束,父进程就会阻塞blocking并等到有子进程结束,获取子进程的信息。

*四、waitpid函数
pid_t waitpid(pid_t pid, int wstatus, int options);
pid是等待回收的子进程的pid,如果传入-1,可以等任意子进程终止。
wstatus等价于wait中的wstatus,用来看终止信息和返回信息的。
options传递头文件sys/wait.h中声明的常量WNOHANG,这个参数可以让当前没有已返回的子进程时,父进程不会阻塞,而是会返回0然后退出函数。

在这里插入图片描述

五、两个宏对wstatus的返回值信息进行判断,获取子进程的结束状况和返回值。
WIFEXITED(wstatus)可以返回子进程的终止信息,子进程正常终止时返回true
WEXITSTATUS(wstatus)可以返回子进程的返回值
调用wait函数回收子进程后都要对子进程的终止信息进行判断并做上日志。

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值