问题
If i use wait(null)
, and i know (for sure) that the child will finish (exit) before we reach to wait(null)
in the parent process , does the wait(null)
block the parent process ??
I mean , the wait()
won't get any signal right ?
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 ;
}
回答1:
wait(NULL)
will block parent process until any of its children has finished. If child terminates before parent process reaches wait(NULL)
then the child process turns to a zombie process
until its parent waits on it and its released from memory.
If parent process doesn't wait for its child, and parent finishes first, then the child process becomes orphan and is assigned to init
as its child. And init will wait and release the process entry in the process table.
In other words: parent process will be blocked until child process returns an exit status to the operating system which is then returned to parent process. If child finishes before parent reaches wait(NULL) then it will read the exit status, release the process entry in the process table and continue execution until it finishes as well.
来源:https://stackoverflow.com/questions/42426816/how-does-waitnull-exactly-work