gpt4 book ai didi

c - fork() 是如何工作的?

转载 作者:太空狗 更新时间:2023-10-29 16:39:17 26 4
gpt4 key购买 nike

我对 fork 真的很陌生,这段代码中的 pid 是做什么的?有人可以解释一下 X 行和 Y 行的结果吗?

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#define SIZE 5
int nums[SIZE] = {0,1,2,3,4};
int main()
{
int i;
pid_t pid;
pid = fork();
if (pid == 0) {
for (i = 0; i < SIZE; i++) {
nums[i] *= -i;
printf("CHILD: %d ",nums[i]); /* LINE X */
}
}
else if (pid > 0) {
wait(NULL);
for (i = 0; i < SIZE; i++)
printf("PARENT: %d ",nums[i]); /* LINE Y */
}
return 0;
}

最佳答案

fork() 复制进程,因此在调用 fork 之后实际上有 2 个程序实例在运行。

您如何知道哪个进程是原始(父)进程,哪个是新(子)进程?

在父进程中,子进程的 PID(将是一个正整数)从 fork() 返回。这就是 if (pid > 0) {/* PARENT */} 代码起作用的原因。在子进程中,fork() 只返回 0

因此,由于if (pid > 0)的检查,父进程和子进程会产生不同的输出,可以看到here (由@jxh 在评论中提供)。

关于c - fork() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15102328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com