如果我使用wait(null)
,并且我知道(肯定)子进程将在我们到达父进程中的wait(null)
之前完成(退出),那么wait(null)
会阻止父进程吗?我是说,wait()
收不到任何信号,对吧?
int main() {
int pipe_descs[2] ;
int i, n, p ;
srand(time(NULL( ;
pipe(pipe_descs) ;
for (i = 0; i < 2; i++) {
pid_t status = fork() ;
if (status == 0) {
n = rand() % 100;
p = (int) getpid() ;
write(pipe_descs[1], &n, sizeof(int)) ;
write(pipe_descs[1], &p, sizeof(int)) ;
exit(0) ;
}
else {
read(pipe_descs[0], &n, sizeof(int)) ;
read(pipe_descs[0], &p, sizeof(int)) ;
printf(" %d %d\n", n, p) ;
wait(NULL) ; // (1)
}
}
return 0 ;
}
发布于 2017-02-24 05:52:19
wait(NULL)
将阻止父进程,直到它的任何子进程完成。如果子进程在父进程到达wait(NULL)
之前终止,则子进程将转换为zombie process
,直到其父进程等待它并将其从内存中释放。
如果父进程不等待它的子进程,并且父进程先完成,那么子进程将成为孤立进程,并被分配给init
作为其子进程。并且init将等待并释放进程表中的进程条目。
换句话说:父进程将被阻塞,直到子进程将退出状态返回给操作系统,然后再返回给父进程。如果子进程在父进程到达等待(NULL)之前完成,那么它将读取退出状态,释放进程表中的进程条目,并继续执行,直到它也完成。
https://stackoverflow.com/questions/42426816
复制相似问题