当前位置: 技术问答>linux和unix
waitpid的返回值的一些问题
来源: 互联网 发布时间:2016-06-10
本文导语: 在实战linux编程这本书上看见这么一段代码在一个函数中 有这个参数siginfo_t *si; 然后调用waitpid() if((pid = waitpid(si->si_pid,&status,WNOHANG)) == si->si_pid) 表示处理进程终止 else if(pid > 0) 表示非预期...
在实战linux编程这本书上看见这么一段代码在一个函数中
有这个参数siginfo_t *si;
然后调用waitpid()
if((pid = waitpid(si->si_pid,&status,WNOHANG)) == si->si_pid)
表示处理进程终止
else if(pid > 0)
表示非预期的子进程死亡
else if(pid == 0)
表示子进程状态改变
请问后面两种返回状态为什么表那些情况呢?
有这个参数siginfo_t *si;
然后调用waitpid()
if((pid = waitpid(si->si_pid,&status,WNOHANG)) == si->si_pid)
表示处理进程终止
else if(pid > 0)
表示非预期的子进程死亡
else if(pid == 0)
表示子进程状态改变
请问后面两种返回状态为什么表那些情况呢?
|
siginfo_t 一般是 发送信号进程在发送信号时所带的一点信号信息,
如果等到了 si->si_pid 的终止,则 pid 的值也是 si->si_pid 如果等到的是其他的进程 则执行
else if(pid > 0)
表示非预期的子进程死亡
即等到了 子进程的死亡 但不是发送信号的那一个 (个人以为 基本不可能发生)
pid 为0,说明 waitpid 返回0 。(注意是非阻塞的WNOHANG),说明发送信号进程的状态未改变。这还是很明显的。