当前位置: 技术问答>linux和unix
关于fork函数的一些疑问~
来源: 互联网 发布时间:2017-05-30
本文导语: #include #include #include int main(int argc,char* argv[]) { printf("before fork~n"); if(fork() 0) { printf("this is parent~n"); int stat; pid_t t=wait(&stat); if(WIFEXITED(stat)) ...
#include
#include
#include
int main(int argc,char* argv[])
{
printf("before fork~n");
if(fork() 0)
{
printf("this is parent~n");
int stat;
pid_t t=wait(&stat);
if(WIFEXITED(stat))
printf("正常终止~n");
}
else
{
printf("this is children~n");
sleep(9);
}
return 0;
}
问题在于,
为什么输出会是这个样子?printf会输出两次?而且如果我只更改if else之间的顺序之后,按理不是父进程调用wait,而子进程sleep,会导致父进程被阻塞么,可是那样子不会被阻塞,但是printf倒会是正常的。。。请问大家这是怎么回事
|
调用了两次fork有四个进程呀
|
你执行了两次fork(),总共产生了四个进程。
一般fork这样用:
一般fork这样用:
#include
#include
#include
int main(int argc,char* argv[])
{
printf("before fork~n");
pid_t pid = fork();
// if(fork() 0)
{
printf("this is parent~n");
int stat;
pid_t t=wait(&stat);
if(WIFEXITED(stat))
printf("正常终止~n");
}
else
{
printf("this is children~n");
sleep(9);
}
return 0;
}