int main() { if(fork()) { printf("i am child\n"); while(1); }else { printf("i am parent\n"); return 0; } return 0; }我父进程不是调用了 return 0么 为什么父进程不会退出
时间: 2024-03-08 17:45:17 浏览: 70
Linux父子进程通信(子进程反转输出,屏蔽Ctrl+c,按Q或q退出)
在这段代码中,父进程和子进程都会执行到最后一行`return 0;`,因为fork()函数的返回值不同,导致它们执行的语句不同。
在父进程中,fork()函数返回的是子进程的进程ID,因此它会执行if语句块中的代码,输出"i am child"并进入一个无限循环。父进程的执行流程会继续执行下去,直到执行到最后一行`return 0;`,然后退出进程。
在子进程中,fork()函数返回的是0,因此它会执行else语句块中的代码,输出"i am parent",然后退出进程。
由于父进程没有调用wait()或waitpid()函数来等待子进程结束并回收子进程的资源,所以子进程会成为僵尸进程。但是父进程不会成为孤儿进程,因为父进程在子进程退出后还会继续执行,直到自己退出。
阅读全文