我想知道这段代码是如何工作的
#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
如果您想了解更多信息或示例,请告诉我