Linux fork()命令

时间:2013-01-19 12:49:29

标签: c linux ubuntu fork printf

我写了一个程序

#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

3 个答案:

答案 0 :(得分:7)

你需要通过man命令: - )

检查:pid_t fork(void);

  

fork()通过复制调用进程来创建新进程。新流程(称为子流)与调用流程完全相同,称为父流。

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

答案 1 :(得分: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
 }

答案 2 :(得分:5)

fork创建了一个新流程。因此有两个进程执行下一个语句。父进程具有returnVal = 5547(子进程'PID)和子进程returnVal = 0

  

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