当前位置: 技术问答>linux和unix
POPEN后如何知道哪个是父进程执行的结果
来源: 互联网 发布时间:2016-06-24
本文导语: 书上说POPEN的执行顺序是先创建一个管道,然后在FORK一个子进程,再关闭管道某端,那我想问下,应该怎么分辨原来的进程和FORK产生的子进程呢?比如说在 if ((fpin = popen("myuclc", "r")) == NULL) break; printf("for a te...
书上说POPEN的执行顺序是先创建一个管道,然后在FORK一个子进程,再关闭管道某端,那我想问下,应该怎么分辨原来的进程和FORK产生的子进程呢?比如说在
if ((fpin = popen("myuclc", "r")) == NULL)
break;
printf("for a test");
为什么是输出一个 for a test呢,
但是
pid = fork();
printf("for a test");
的话就输出 for a testfor a test
为什么呢?难道popen后也只有一个进程?父进程自己注销了? 谢谢啊,初学,小菜问题....
if ((fpin = popen("myuclc", "r")) == NULL)
break;
printf("for a test");
为什么是输出一个 for a test呢,
但是
pid = fork();
printf("for a test");
的话就输出 for a testfor a test
为什么呢?难道popen后也只有一个进程?父进程自己注销了? 谢谢啊,初学,小菜问题....
|
popen = pipe + fork + exec
在fork一个子进程后,子进程是父进程的拷贝,但用popen后子进程会执行exec调用myuclc程序以替代父进程的拷贝,所以不会输出for a test,你看到的for a test是父进程输出的
在fork一个子进程后,子进程是父进程的拷贝,但用popen后子进程会执行exec调用myuclc程序以替代父进程的拷贝,所以不会输出for a test,你看到的for a test是父进程输出的