0

所以,

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

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 */
    }
}

我在 sub(.cpp) 中的执行代码是:

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

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

我的输出是这样的:

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

有没有办法可以阻止在 exec 调用中显示提示?为什么它只显示在第一个 exec 调用上,而不是每个调用上?

4

1 回答 1

1

你看到的是你的 shell 的正常提示,因为父进程很快就终止了。它不是 exec 调用的输出。分叉的进程在父进程终止后打印它们的输出。

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

于 2013-03-13T19:30:26.497 回答