我原来的代码太长了,所以让我试着写一个简单的版本
//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。
我是否需要在父进程中关闭这些管道?