C语言 fork() exit(0) 和 wait(NULL) 是如何工作的?



我想知道这段代码是如何工作的

#include<stdio.h> 
#include<stdlib.h> 
#include<sys/wait.h> 
#include<unistd.h> 

int main() 
{ 
pid_t cpid; 
if (fork()== 0) 
exit(0);         
else
cpid = wait(NULL); 
printf("Parent pid = %dn", getpid()); 
printf("Child pid = %dn", cpid); 

return 0; 

如果我们处于子进程中,(fork()==0)返回 true。右?

然后exit(0)将终止子进程。

那么,如果我们除非在父进程中,否则我们无法输入else案例,wait(NULL)将如何返回子 pid?

fork函数创建一个新进程并返回两次:一次返回给父进程,一次返回给子进程。

在子进程中,fork返回 0,因此if部分运行,该部分调用exit。 在父进程中,fork返回子进程的 pid,因此它进入else部分,在该部分中调用wait,一旦子进程退出,子进程就会返回子进程的 pid。

我有一个非常好的网站来了解如何使用fork(),exit()和wait()。你可以找到一个非常好的带有代码示例的图表。

fork创建新进程,称为子进程,该进程与进行fork()调用的进程(父进程)同时运行。 创建新的子进程后,两个进程都将在fork()系统调用之后执行下一条指令。子进程和父进程使用相同的PC(程序计数器)。

仅理解分叉的链接:

https://www.geeksforgeeks.org/fork-system-call/

使用 wait() 和 exit() 理解 fork 的链接:

https://www.geeksforgeeks.org/wait-system-call-c/

如果你不明白我有 GitHub 存储库,我在其中使用 fork(),wait() 并退出创建 Linux Shell:

https://github.com/ClementBolin/Basic_Shell/blob/master/src/prompt/command.c https://github.com/ClementBolin/Basic_Shell/blob/master/src/prompt/execute_binary.c

如果您想了解更多信息或示例,请告诉我

最新更新