Unix进程控制之3---wait函数系列

28 篇文章 0 订阅

如果一个进程结束了,不论是正常的还是非正常的,内核都会通过发送SIGCHLD 信号给父进程。子进程的结束是个异步事件,父进程执行这个信号,通过内核的异步通知。

父进程通过调用wait waitpid 可以 1 :如果所有的子进程正在运行,父进程阻塞。 2 :如果一个子进程结束了,父进程通过 wait 取得了结束进程的状态值,父进程会立即随着子进程的结束状态返回。 3 :如果进程没有子进程那么返回 error

wait waitpid 的函数原型及头文件定义

#include <sys/wait.h>

pid_t wait(int *statloc);

pid_t waitpid(pid_t pid, int *statloc, int options);

Both return: process ID if OK, 0 (see later), or 1 on error

这两个函数的区别为:

1 wait 会阻塞调用者,直到一个子进程结束。而 waitpid 函数有一个选项防止它阻塞。

2 wait 函数不会等待子进程先结束;他有一系列的选项来控制等待那个进程。

下面为一个调用wait 等待的例子:

Ubuntu10.4 上的结果:

main pid is 2305,my ppid is 1265

child pid is 2306,my ppid is 2305//after waitted 5s,continue to execute 

my pid is 2305,i have waited 2306 died,my ppid is 1265

child pid is 2307,my ppid is 2305

my pid is 2305,i have waited 2306 died,my ppid is 1265

在这个程序中,由于第一个fork 长生的子进程中, sleep 5 秒,所以运行到此处,主程序阻塞 5 秒后运行。这也是 wait 函数的一个不足之处,要阻塞主程序,来等待子程序的结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值