Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C wait()在Unix上做什么?_C_Unix_Ubuntu_Wait - Fatal编程技术网

C wait()在Unix上做什么?

C wait()在Unix上做什么?,c,unix,ubuntu,wait,C,Unix,Ubuntu,Wait,我在一本Unix系统书中读到了关于wait()函数的内容。这本书包含一个程序,其中包含wait(NULL)。我不明白那是什么意思。在另一个节目中有 while(wait(NULL)>0) …这也让我挠头 有人能解释一下上面的函数在做什么吗?wait(NULL)它应该相当于waitpid(-1,NULL,0) wait(NULL)等待所有子进程完成 所有这些系统调用都用于等待中的状态更改 调用进程的子进程,并获取有关该子进程的信息 他的状态已经改变了。状态更改被视为:子级终止;孩子被一个

我在一本Unix系统书中读到了关于
wait()
函数的内容。这本书包含一个程序,其中包含
wait(NULL)
。我不明白那是什么意思。在另一个节目中有

while(wait(NULL)>0) 
…这也让我挠头

有人能解释一下上面的函数在做什么吗?

wait(NULL)
它应该相当于
waitpid(-1,NULL,0)

wait(NULL)
等待所有子进程完成

所有这些系统调用都用于等待中的状态更改 调用进程的子进程,并获取有关该子进程的信息 他的状态已经改变了。状态更改被视为:子级终止;孩子被一个信号拦住了;或者孩子被一个信号打断了

因此,
wait()
允许进程等待,直到其子进程之一更改其状态,例如存在。如果使用进程id调用
waitpid()
,它将等待特定子进程更改其状态,如果未指定
pid
,则它相当于调用
wait()
,并等待任何子进程更改其状态

wait()
函数在成功时返回子pid,因此当在如下循环中调用它时:

while(wait(NULL)>0) 

这意味着等待所有子进程退出(或更改状态),并且不再有不需要的子进程(或直到出现错误)

谷歌快速建议,
wait(NULL)
等待任何子进程完成

man 2 wait
可以回答您的问题。这就是等待(NULL)等待由调用wait()的进程创建的任何子进程@UmerFarooq:也更新了我的答案@从错误中学习等待所有的孩子和等待任何一个孩子并不是一回事。all=every,any=“改变状态的第一个”答案中的
wait
waitpid
之间有些混淆。无法使用进程id调用
wait
。很抱歉,您的回答中还有一个错误,wait在成功时不会返回0,否则您的while循环将在第一次迭代时退出。从手册页:“wait():成功时,返回终止子进程的进程ID;”(和exist的含义不同于exit)