【问题标题】:Prevent terminal prompt from printing on exec() call防止终端提示在 exec() 调用时打印
【发布时间】:2013-03-01 22:29:35
【问题描述】:

所以,

有很多类似的问题,但没有一个我能够使用。我的代码sn-p如下:

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 调用上显示,而不是在每个调用上显示?

【问题讨论】:

    标签: shell terminal operating-system exec fork


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢...这是有道理的。但是,我的问题仍然存在;有没有办法阻止它?
    • @DaxDurax:你为什么要压制它?执行命令后打印提示符是 shell 的正常行为。
    • @DaxDurax:我在我的答案中添加了一些内容,也许这就是您要寻找的内容。
    猜你喜欢
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 2018-11-25
    • 2016-08-10
    • 1970-01-01
    • 2011-10-08
    • 2018-05-08
    • 1970-01-01
    相关资源
    最近更新 更多