【发布时间】:2023-04-11 07:21:01
【问题描述】:
我有这个程序
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x =1;
int* y = malloc(sizeof(int));
*y = 2;
if (fork()==0)
x++;
if (fork()==0)
(*y)++;
printf("%d", (x+*y));
}
这是输出 3445。这是我目前所知道的,fork() 创建了一个新的子进程。如果是子进程,则 fork() 返回 0,如果是父进程,则返回 PID。因此,一旦您调用 fork(),它就会成为父进程,并且 fork()==0 仅在子进程而不是父进程上为真。谁能让我更深入地了解实际发生的情况,以便我获得该输出?
【问题讨论】:
-
用笔和纸坐下。 (记住你
fork()两次导致printf被执行4 次。)