我有一些代码如下:
pipe(fd);
child_map[0] = fd[0];
child_map[1] = fileno(stdout)
child_map[2] = fileno(stderr);
pid = fork();
if (child_process)
dup(child_map[0], STDIN_FILENO)
dup(child_map[0], STDOUT_FILENO)
dup(child_map[0], STDERR_FILENO)
execvp(argv[0], argv) /* child process can be either "grep" or "more" etc */
else if parent_process
return;
我的问题是,在我将输出重定向到grep / more(可以是子进程)后,我无法返回终端提示符。虽然命令o / p在终端上打印得很好。但我没有收到提示,我可以看到“更多”或“grep”进程在后台运行。我需要输入ctrl + C来获取提示。我知道它与文件描述符没有被关闭等有关,但我不知道如何解决这个问题。
这实际上是从另一个进程上下文完成的。我可以看到父进程仍在运行。除非我终止,否则它不会终止。因此,没有任何关于孩子成为孤儿的问题。 [从Vin的评论中提出,澄清值有问题-msw]
答案 0 :(得分:0)
父进程应该等待子进程完成。
答案 1 :(得分:0)
问题在于已经打开的文件描述符的不正确关闭。有些人必须关闭,我没有做过。所以这个过程一直在等待输入。