|
|
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实验18 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. V6 ?- Z' a2 ?, Y( ?7 {" O
|
|