关于fork()回到2次,个人觉得发在这里比linux区靠谱,求围观
关于fork()返回2次,个人觉得发在这里比linux区靠谱,求围观~
在linux中,可以使用fork创建一个子进程,这里fork是会返回2次的,1次时父进程返回,返回的是子进程PID,另一次是子进程返回的,返回0表示创建子进程成功.如下:
如果我写成
0
一个子进程的pid(整数)
0
一个子进程的pid(整数)
fork后面的语句被执行了2次,如果还有其他语句在后面的话,也会被执行2遍,那就有风险了,这里fork函数后面,遇到什么停止执行呢?
我没有办法就把fork()写进一个函数,然后调用test(). test()后面的语句就只执行一次了.求解
------解决方案--------------------
不明白你想干什么fork的用法就是那样,用if区分不已经很好了么?
如果你不希望子进程执行别的东西,那么你只要exec了,子进程的上下文就被加载的程序替换了,不存在继续执行两次的问题。或者你可以让子进程执行你规定的某个函数,函数结束是直接exit结束进程。
------解决方案--------------------
弄一个if不就行了?
如果pid是0,那么是在子进程。
------解决方案--------------------
楼主竟然在VC版问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 }