关于fork函数的一些疑问~

kannimad 2014-10-14 04:09:24
#include<stdio.h>
#include<sys/wait.h>
#include<unistd.h>


int main(int argc,char* argv[])
{
printf("before fork~\n");
if(fork() < 0)
{
printf("error\n");
}
else 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倒会是正常的。。。请问大家这是怎么回事
...全文
98 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 1 楼 mymtom 的回复:
调用了两次fork有四个进程呀
好吧~~,我傻了
轮子学长 2014-10-14
  • 打赏
  • 举报
回复
你执行了两次fork(),总共产生了四个进程。 一般fork这样用:
#include<stdio.h>
#include<sys/wait.h>
#include<unistd.h>


int main(int argc,char* argv[])
{
    printf("before fork~\n");
    pid_t pid = fork();
//  if(fork() < 0)
    if(pid < 0)
    {   
          printf("error\n");
    }   
//  else if(fork() > 0)
    else if(pid > 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;
}
mymtom 2014-10-14
  • 打赏
  • 举报
回复
调用了两次fork有四个进程呀

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧