当前位置: 技术问答>linux和unix
关于fork子进程的问题
来源: 互联网 发布时间:2017-03-09
本文导语: #include #include #include #include #include int fTree(int lev); int main() { fTree(2); printf("%d->%dn", getppid(), getpid()); return 0; } int fTree(int lev) { pid_t cPid; cPid = fork(); switch(cPid) { case...
#include
#include
#include
#include
#include
int fTree(int lev);
int main()
{
fTree(2);
printf("%d->%dn", getppid(), getpid());
return 0;
}
int fTree(int lev)
{
pid_t cPid;
cPid = fork();
switch(cPid)
{
case -1:
perror("fork failed");
break;
case 0:
if(lev != 1)
{
fTree(-- lev);
}
break;
default:
wait(NULL);
cPid = fork();
if(cPid == -1)
{
perror("fork failed");
}
else if(cPid == 0)
{
if(lev != 1)
{
fTree(-- lev);
}
}
else
{
wait(NULL);
//Do Noting
//Main process Over
}
break;
}
return 0;
}
我的原意是想创建一个满二叉树状的进程树,但是从程序的输出来看:
1,根的子树少了一颗(从PID也可以看出来,漏了一个数,它使整棵树的进程ID不连续了)。
2,整棵树多了一层。
|
我觉得你可以删除原来的跟,原因是因为你打印了你所写的程序的父进程。如果在bash终端中运行的话。应该是这样的。
bash -> main -> fork1
-> fork2
亲,能明白不
bash -> main -> fork1
-> fork2
亲,能明白不