fork-exec-dup之后没有返回终端提示符

时间:2011-07-18 20:15:04

标签: c linux exec fork

我有一些代码如下:

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]

2 个答案:

答案 0 :(得分:0)

父进程应该等待子进程完成。

答案 1 :(得分:0)

问题在于已经打开的文件描述符的不正确关闭。有些人必须关闭,我没有做过。所以这个过程一直在等待输入。