2011-07-18 46 views
1

後我有一些一段代碼,其是這樣的:未取回終端提示叉EXEC-DUP

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 /以上(其可以是子進程),我無法獲取終端提示符。雖然命令o/p在終端上打印得很好。但我沒有回到提示,我可以看到「更多」或「grep」進程在後臺運行。我需要輸入ctrl + C來獲得提示。我知道它與文件描述符沒有關閉等有關,但我不知道如何解決這個問題。

這實際上是從另一個過程上下文來完成的。我可以看到父進程仍在運行。除非我終止它,否則它不會終止。所以,這個孩子沒有孤兒的問題。 [從Vin的評論中解釋,澄清值是值得懷疑的-msw]

+0

有人可以幫忙嗎? – Vin

+0

您應該首先接受問題 –

回答

0

問題在於不正確地關閉已打開的文件描述符。有些必須關閉,我沒有完成。所以這個過程一直在等待輸入。

+0

這也是一個很好的資源:http://stackoverflow.com/questions/916900/having-trouble-with-fork-pipe-dup2-and-exec-in-c – Vin

0

父進程應該等待子進程完成。

+0

父進程是將輸入提供給more/grep的進程。因此,如果父母一直等待子進程結束,那麼沒有用處。 – Vin

+0

父應該提供輸入直到沒有更多,然後關閉輸入文件描述符並使用wait(3p),直到孩子退出。 – Antti