linux c编程问题 进程的创建和控制

来源:百度知道 编辑:UC知道 时间:2024/06/17 04:24:31
刚接触linux,学到了创建进程那里。写了个创建2个子进程的测试代码

#include<stdio.h>
#incdude<stdlib.h>

void main()
{
int pid1,pid2l;
pid1=fork();
pid2=fork();
if((pid1<0)||(pid2<0))
{
perror("error");
exit(-1);
}
else if((pid1==0)&&(pid2==0))
{
printf("b");
printf("c");
exit(0);
}
printf("a");
}

上述代码中,我想得到的结果是bca, 但是实际得到的结果是bcaaa,也就是说最后的printf("a")多执行了2遍,这是为什么?还有,exit(0)是直接结束了2个子进程吗。
因为刚接触linux编程,单步调试使得实在是不太溜,所以请高手帮忙解答一下,谢谢

pid1=fork();
printf("father pid1=%d\n",getppid);
printf("child pid1=%d\n",getpid);
pid2=fork();
printf("father pid2=%d\n",getppid);
printf("child pid2=%d\n",getpid);
这样改你再看看,就知道发生了什么事情!
你的fork1()产生一个父进程,一个子进程,fork2()时,相当于在前面的基础上:前面的父进程产生了一个父进程和一个子进程,前面的子进程也产生一个父进程和一个子进程,这样相当于有三个广义的父进程要执行printf("a")的程序,当然打印出三个a来啦。知道了吧,这样写的程序可读性极差,要注意,把自己都弄晕了。

你不仿把三个printf写成这样: printf("a或b或c:%d,%d",pid1,pid2);