找回密码
 注册
关于网站域名变更的通知
查看: 309|回复: 1
打印 上一主题 下一主题

Linux多任务编程(五) ------- 学习wait()、waitpid()函数及其基础实验

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-9-29 10:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
wait()和waitpid()
* K# E8 L4 Q! d
* Q- y; H  o) g" M函数说明

" P% ?& R9 O0 ~' U; G
. Y  Z( ~" [. F% U- \" P   wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接收到了一个指定的信号为止。如果该父进程没有子进程或者它的子进程已经结束,则wait()函数就会立即返回。
6 r- o7 [1 Y) `  Z/ u- z
3 s% j7 h% |2 d. v1 U0 q' l   waitpid()的作用和wait()一样,但它并不一定要等待第一个终止的子进程(它可以指定需要等待终止的子进程),它还有若干选项,如可提供一个非阻塞版本的 wait()功能,也能支持作业控制。实际上,wait()函数只是 waitpid()函数的一个特例,在Linux 内部实现 wait()函数时直接调用的就是waitpid()函数。+ I7 A, H& c5 X" q* ~$ R
# V% k$ Z) B0 [, m% w, u+ |
函数格式
3 G6 j" `, D0 R8 t! P/ k! F5 @8 ~2 n, X# z1 T2 H; C" P0 }6 M
   下图为wait()函数的格式
* q' A6 ^! E6 A- q9 j& Y, P
) ]4 \- ?5 ^* u! d/ h) ]1 B  C   

* b: @' w: e* u  ^$ R
( \# U1 J" u& b) N8 J+ P    下图为waitpid()函数的格式
4 I+ P% s5 a3 l0 r) x+ @
* T( N% Q# J, [6 T$ T3 g5 W0 W     

* U0 ]5 F9 K( w; j7 E9 t. E8 v4 F+ r8 R+ ]; B- @' q
$ T5 K: A! t' `; t
基础实验
. v: K2 v5 ?( H5 F
8 [' E& F: P7 }4 s' g实验1
8 x8 _- T/ A: R# }* s$ z4 b

$ p2 \- M+ p3 {* Z1 g    本实验中首先使用fork()创建一个子进程,然后让其子进程暂停5s(使用了sleep()函数)。接下来对原有的父进程使用waitpid()函数,并使用参数WNOHANG是该父进程不会阻塞。若有子进程退出,则waitpid()返回子进程号;若没有子进程退出,则waitpid()返回0,并且父进程每隔1s循环判断一次。该程序的流程图如下:+ u7 U, y0 q7 m/ U2 y
+ O* ^; @8 S, E8 M6 e1 b
游客,如果您要查看本帖隐藏内容请回复

  |6 K( t- m6 a& l6 I" v  j' `, D, X) g2 I

2 K8 p) B% j2 x7 Q& C3 S" w. V
6 ?- Z' a2 ?, Y( ?7 {" O
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 01:22 , Processed in 0.156250 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表