-2

我写了一个程序

#include <stdio.h>
#include <unistd.h>

int main()
{
    int returnVal = fork();
    printf("Return Value: %i\n", returnVal);
    return 1;
}

当我编译并运行时,我得到以下输出我只给出了一个 printf 语句,那么为什么我看到 2 个打印。如果我删除打印,则不会打印任何内容。

alwin@alwin-desktop:~/Projects/Nix$ ./a.out 
Return Value: 5547
Return Value: 0
4

3 回答 3

7

你需要通过 man 命令:-)

查看:pid_t fork(void);

通过fork()复制调用进程创建一个新进程。新进程(称为子进程)是调用进程(称为父进程)的完全副本。

详细信息:: 首先您执行了创建子进程的代码。现在您有两个进程执行相同的代码。所以有两个打印语句,第一个是父进程,第二个是子进程。

于 2013-01-19T12:53:03.937 回答
6

printf你程序中的语句被执行了twice,因为一旦fork成功,程序就被two processeschildparent进程)控制了。所以这里的printf,是子进程和父进程都执行的

为了避免这种行为,最好在程序中使用 fork() 进行三种不同的条件检查

int pid;
if((pid = fork()) == -1 )
{ //fork unsuccessful 
 }
else if ( pid > 0)
{ //This is parent
 }
else
{//This is child
 }
于 2013-01-19T13:00:54.307 回答
5

fork创建一个新进程。所以有两个进程执行下一条语句。父进程有returnVal = 5547(子进程的PID)和子进程returnVal = 0

fork()函数应创建一个新进程。新进程(子进程)应是调用进程(父进程)的精确副本

于 2013-01-19T12:51:37.367 回答