当前位置: 技术问答>linux和unix
操作系统实现中的 if else fork()
来源: 互联网 发布时间:2016-11-01
本文导语: 有一段程序 #include main() { int p1,p2; if(p1=fork()) putchar('b'); else { if(p2=fork()) putchar('c') else putchar('a'); } } 运行结果:为bca(有时会出现abc的任意的排列)。 有一个疑问,既然用了if else了,为...
有一段程序
#include
main()
{
int p1,p2;
if(p1=fork())
putchar('b');
else
{
if(p2=fork())
putchar('c')
else
putchar('a');
}
}
运行结果:为bca(有时会出现abc的任意的排列)。
有一个疑问,既然用了if else了,为什么还会三个putchar都执行呢?
初做操作系统实验,不是很明白。谢谢。
#include
main()
{
int p1,p2;
if(p1=fork())
putchar('b');
else
{
if(p2=fork())
putchar('c')
else
putchar('a');
}
}
运行结果:为bca(有时会出现abc的任意的排列)。
有一个疑问,既然用了if else了,为什么还会三个putchar都执行呢?
初做操作系统实验,不是很明白。谢谢。
|
这是一个嵌套的进程生成,因为fork函数返回两次,一次是父进程一次是子进程,谁先返回是不确定的。所以出现了顺序不定的问题,如果是问为什么会都abc都显示建议去看一下Linux的C编程中的进程那一块儿。
|
if(fork())
{
//父进程执行这儿
}
else
{
//子进行执行这儿。
}
{
//父进程执行这儿
}
else
{
//子进行执行这儿。
}
|
if(p1=fork())
lz这么写有问题吧,是不是应该if( (p1=fork()) )
lz这么写有问题吧,是不是应该if( (p1=fork()) )
|
if(p1 = fork)写法可以的。