我写了一个程序
#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
答案 0 :(得分:7)
你需要通过man命令: - )
fork()
通过复制调用进程来创建新进程。新流程(称为子流)与调用流程完全相同,称为父流。
详细信息::首先,您执行了创建子进程的代码。现在你有两个进程执行同一段代码。所以两个打印语句,父进程的第一个和子进程的第二个。
答案 1 :(得分:6)
程序中的printf
语句已执行twice
,因为一旦fork成功,该程序将由two processes
(child
和parent
进程控制这里的printf由子进程和父进程执行
为了避免这种行为,使用fork()
在程序中进行三种不同的条件检查总是好的int pid;
if((pid = fork()) == -1 )
{ //fork unsuccessful
}
else if ( pid > 0)
{ //This is parent
}
else
{//This is child
}
答案 2 :(得分:5)
fork
创建了一个新流程。因此有两个进程执行下一个语句。父进程具有returnVal = 5547
(子进程'PID)和子进程returnVal = 0
。
fork()
函数将创建一个新进程。新进程(子进程)应该是调用进程(父进程)的精确副本