C wait()在Unix上做什么?
我在一本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)等待所有子进程完成 所有这些系统调用都用于等待中的状态更改 调用进程的子进程,并获取有关该子进程的信息 他的状态已经改变了。状态更改被视为:子级终止;孩子被一个
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)