c尝试创建另一个子进程时冻结程序

时间:2016-01-24 05:25:15

标签: c fork

我原来的代码太长了,所以让我试着写一个简单的版本

//this commands() function will be called multiple times
int commands()
  {
    pid_t pid = fork();
    if(pid<0)
    {
      printf("Failed to open child process\n");
      return -1;
    }

    if(pid == 0)
    {
      //we are in child
      child_function(); // calls some function to do some work
      //note that this function end up calling execvp() so it never comes back  
    }
    else
    {
      int status=0;
      int_returned_pid = waitpid(-1, &status,0);

      if(status !=0)
        return 1;
      else
        return 0;
    }

  }

所以会发生什么,当程序第一次调用命令时,它成功创建了一个子进程,子进程完成并返回命令。 但是当第二次调用命令函数时,会再次成功创建子项并调用child_function()。在此之后,程序停止运行,感觉它正在等待输入或某些事情(它不会崩溃)。

在这里待了几个小时后,我不知道是什么问题,请帮助。

编辑:我在我的程序中使用管道,基本上第一次调用命令函数时,我需要它的子节点从stdin读取一些东西,做一些东西然后写入管道。然后在第二次调用命令函数时,我需要它的子节点从第一个调用子节点写入的管道中读取然后写入stdout。

我是否需要在父进程中关闭这些管道?

0 个答案:

没有答案