gpt4 book ai didi

c - 理解 Unix 中的 fork 机制

转载 作者:太空宇宙 更新时间:2023-11-04 06:37:33 25 4
gpt4 key购买 nike

我试图找出父进程和子进程的行为。下面是我的代码

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main(void)
{
int i,j,cnt=0;
int pid,present_pid;
int a[10];
for(i=0; i<10; i++) {
a[i] = i;
}

i = 0;
j = 5;
present_pid = getpid();
printf("Now in process %d\n",getpid());
printf("\n*******************before fork******************\n");
for(i=0;i<10;i++) {
printf(" %d",a[i]);
}
printf("\n*******************before fork******************\n");

int ret = fork();
if(ret == 0) {
printf("\n*******************after fork******************\n");
printf("Now in process %d\n",getpid());
printf("Child Process created");
for(i=0; i<5; i++) {
a[i]= +1;
i++;
}
}
else if(ret > 0) {
printf("\nNow in process %d\n",getpid());
for(j=5; j<10; j++) {
a[j] = +1;
j++;
}
wait();
}

for(i=0;i<10;i++) {
printf(" %d",a[i]);
}
return 0;
}

这是程序的输出

Now in process 12248

*******************before fork******************
0 1 2 3 4 5 6 7 8 9
*******************before fork******************

*******************after fork******************
Now in process 12249
Child Process created 1 1 3 3 5 5 6 7 8 9
Now in process 12248
0 1 2 3 4 6 6 8 8

所以最初只有一个进程 12248 fork 另一个进程 (12249)。现在这两个过程并行运行(如果我错了请纠正我)。理想情况下, child 应该只对数组 a 的内容加 1 到第一部分,而 parent 应该对第二部分做同样的事情。但是正如您所看到的,输出并不像预期的那样。请给点建议..

最佳答案

fork创建的进程是真正的重量级操作系统进程,而不仅仅是轻量级线程!创建的进程不与派生它的进程共享任何内存。相反,内存被复制(懒惰地,所谓的写时复制),所以你现在实际上有两个数组 a 并且每个进程写入他自己的 a 副本>。

关于c - 理解 Unix 中的 fork 机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12952932/

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