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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
wait()和waitpid()
! u1 o0 g1 ]5 j( y6 a1 _8 `% C) S' z$ g$ w( E3 x
函数说明
* [1 b- |% |  j* z

/ k/ B) y% {$ \# l- F& Y   wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接收到了一个指定的信号为止。如果该父进程没有子进程或者它的子进程已经结束,则wait()函数就会立即返回。
% g* ?# b3 u/ c1 Z8 ]  j
5 \& o9 b. ]/ N. u0 q9 v* T   waitpid()的作用和wait()一样,但它并不一定要等待第一个终止的子进程(它可以指定需要等待终止的子进程),它还有若干选项,如可提供一个非阻塞版本的 wait()功能,也能支持作业控制。实际上,wait()函数只是 waitpid()函数的一个特例,在Linux 内部实现 wait()函数时直接调用的就是waitpid()函数。
: [  M! T5 S* a4 K- T. V
* Q5 S' B4 P/ k+ f& ]函数格式
) ^  b) g1 A1 H' Z6 ?. T
5 Y; _7 m. p/ r$ _4 s, w   下图为wait()函数的格式# w5 Z' y0 M  Y9 U# W  E8 x* w9 q

! ]: h9 H% Y0 K8 b" ]% [   
& z& ?. f# I9 _! [$ {& m
  p6 X1 x+ B/ {& v2 T; f
    下图为waitpid()函数的格式
$ q- G+ N- {" b! z9 K7 z% d: p; x8 b/ X
* \" o2 c/ c# H     

8 \: s# n. c* s4 s# E7 Q8 `% s: m% Q2 h, }( l
$ c& |0 e8 l/ l9 D$ V9 E/ N
基础实验
/ x6 T  A- `7 o9 X9 S. y- i
5 a+ ?5 R( r# T% U7 P实验1
! Q( K' k7 I/ f6 f

9 C- Q7 T8 d9 ]    本实验中首先使用fork()创建一个子进程,然后让其子进程暂停5s(使用了sleep()函数)。接下来对原有的父进程使用waitpid()函数,并使用参数WNOHANG是该父进程不会阻塞。若有子进程退出,则waitpid()返回子进程号;若没有子进程退出,则waitpid()返回0,并且父进程每隔1s循环判断一次。该程序的流程图如下:
0 `0 ?" |4 x( u/ Q3 }; i4 h$ a
9 |. T- f- B, o1 O
游客,如果您要查看本帖隐藏内容请回复
) a6 R) q5 z5 \, w* e* R" K( _

0 L# R6 z, N5 l1 K% d( I- A0 c5 q" {1 |0 h( U2 N/ `
4 n) k; S! o" I5 W# g5 r+ Y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 00:14 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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