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

时间:2013-03-13 19:25:51

标签: shell terminal operating-system exec fork

SO,

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

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调用上显示?为什么它只显示在第一个exec调用上,而不是每个都显示?

1 个答案:

答案 0 :(得分:1)

您看到的是shell的正常提示,因为父进程非常快地终止。它不是exec调用的输出。分支进程在父进程终止后打印输出

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