2013-03-13 32 views
0

SO,防止在exec()调用上打印终端提示符

有许多类似的问题,但是没有一个能够使用。我的代码片段如下:

for(int j=0; j<N; j++) { 
    pid_t pid = fork(); 
    if (pid == -1) { 
     exit(-1); //err 
    } else if (pid == 0) {//kid 
     stringstream ss; 
     ss<<j; 
     execlp("./sub","sub",ss.str().c_str(),NULL); 
     exit(0); 
    } else { 
      /* parent */ 
    } 
} 

我的子(的.cpp)执行代码为:

int main(int argc, char **argv) 
{ 

    cout<<argv[i]<<endl; 
    exit(0); 
} 

我的输出是这样的:

[terminal prompt '$'] 4 
2 
3 
etc. 

有没有一种方法,我可以防止在exec调用中显示提示?为什么它只会在第一次执行呼叫时显示,而不是每一次都显示?

回答

1

你看到的是你的shell的正常提示,因为父进程非常快速终止。它不是执行调用的输出。分叉的进程在父进程终止之后打印它们的输出

您可以在父进程中使用waitpid()“等待”,直到所有分支进程终止。

+0

谢谢...这是有道理的。然而,我的问题仍然存在;无论如何,以防止它? – 2013-03-13 19:31:32

+0

@DaxDurax:你为什么要压制它?在命令执行后,打印提示符是shell的正常行为。 – 2013-03-13 19:34:36

+0

@DaxDurax:我已经添加了一些东西给我的答案,也许这就是你要找的。 – 2013-03-13 19:42:54