关于fork()回到2次,个人觉得发在这里比linux区靠谱,求围观

关于fork()返回2次,个人觉得发在这里比linux区靠谱,求围观~
在linux中,可以使用fork创建一个子进程,这里fork是会返回2次的,1次时父进程返回,返回的是子进程PID,另一次是子进程返回的,返回0表示创建子进程成功.如下:
C/C++ code
    int iPid = fork();
    if(iPid == 0)
    {
        printf("start son proc \n");
        execlp("son", "", "", (char *)0, NULL);    //在DVRProxy的命令行第二个参数是配置文件的名称    
    }
    else
    {        
             printf("son pid is: %d \n", iPid);
    }

如果我写成
C/C++ code
         int iPid = fork();
         printf("pid is: %d \n", iPid);
         printf("pid is: %d \n", iPid);
则输出是
0
一个子进程的pid(整数)
0
一个子进程的pid(整数)

fork后面的语句被执行了2次,如果还有其他语句在后面的话,也会被执行2遍,那就有风险了,这里fork函数后面,遇到什么停止执行呢?

 我没有办法就把fork()写进一个函数,然后调用test(). test()后面的语句就只执行一次了.求解
C/C++ code
void test()
{
         int iPid = fork();
    if(iPid == 0)
    {
        printf("start son proc \n");
        execlp("son", "", "", (char *)0, NULL);    //在DVRProxy的命令行第二个参数是配置文件的名称    
    }
    else
    {        
             printf("son pid is: %d \n", iPid);
    }
}


------解决方案--------------------
不明白你想干什么fork的用法就是那样,用if区分不已经很好了么?
如果你不希望子进程执行别的东西,那么你只要exec了,子进程的上下文就被加载的程序替换了,不存在继续执行两次的问题。或者你可以让子进程执行你规定的某个函数,函数结束是直接exit结束进程。
------解决方案--------------------
弄一个if不就行了?
如果pid是0,那么是在子进程。

------解决方案--------------------
楼主竟然在VC版问LINUX问题,好强啊。

fork()之后就分2条路了。主进程和子进程(Linux没有线程)
C/C++ code

         int iPid = fork();
    if(iPid == 0)
    {
        printf("start son proc \n");
        execlp("son", "", "", (char *)0, NULL);   //子进程等于0     
     }
    else
    {        
        printf("father pid is: %d \n", iPid); //父进程大于0
    }