读书人

关于fork()回到2次,个人觉得发在这里比

发布时间: 2012-09-17 12:06:51 作者: rapoo

关于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    } 

读书人网 >VC/MFC

热点推荐