wait和waitpid函数

本文详细介绍了在操作系统中如何处理子进程的终止,包括内核如何通知父进程子进程的状态变化,以及父进程如何通过wait和waitpid函数来获取这些信息。重点讲解了wait和waitpid函数的区别,以及waitpid提供的额外功能。

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

当一个进程正常或异常终止,内核向其父进程发生SIGCHLD信号。

子进程终止是异步事件,可以在父进程运行的任何时候发生。

对于子进程终止信号,父进程可以忽略(默认)或调用wait、waitpid函数。

<span style="font-family:KaiTi_GB2312;font-size:18px;">#include<sys/types.h>
#include<sys/wait.h>
pid_t wait(int* statloc);
pid_t waitpid(pid_t pid,int* statloc,int options);
</span>

对于waitpid:

pid==-1,等待任一子进程。此时与wait等效。

pid>0,等待进程ID为pid的子进程。

pid==0,等待其组ID等于调用进程的组ID的任一子进程。

pid<-1,等待其组ID等于pid的绝对值的任一子进程。



wait和waitpid区别:

wait会使调用者阻塞,直到一个子进程终止,wait立即返回。wait返回子进程的ID。所以它总能了解那个子进程终止了。

而waitpid有选项可以选择不阻塞,并且可以选择它所要等待的进程。

waitpid提供3个wait没有的功能:

1 等待一个特定进程。

2 提供非阻塞选项。等待子进程但是不阻塞。

3 支持作业控制。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值