将一个进程标准输出重定向到管道将产生不同的运行结果

Redirect one process stdout to pipe will make difference running result?

本文关键字:结果 运行 管道 重定向 一个 标准输出 进程      更新时间:2023-10-16
    Poco::Pipe outputPipe;
    Poco::Pipe errorPipe;
    Poco::Process::Env env;
    Poco::Process::Args arg;
    Poco::Process::launch(exeFile, arg, workDir, 0 , &outputPipe, &errorPipe, env);

我使用上面的代码创建了两个进程,一个是对的,另一个是错的。然后我更改代码

    Poco::Process::launch(exeFile, arg, workDir, 0 , 0, 0, env);

唯一的区别是我不会将标准输出和标准重定向到管道。然后我创建了两个流程,现在一切都好了。

在我看来,我不认为重定向 stdout 和 stderr 会导致进程运行并产生不同的结果。对吗?

如果我错了,什么情况会有所不同?

谢谢。

更改至少可以通过两种方式产生影响:

  1. 不显示读取管道的代码。如果其中一个管道在读取代码读取数据之前填充,则启动的进程将阻止写入管道,直到从管道读取数据。

  2. 当输出(特别是)是管道时,输出可能是完全缓冲的,而不是行缓冲或无缓冲的。 这可能意味着输出不像在非管道示例中那样迅速显示。 程序可能会编写一行,然后执行一些工作,然后编写另一行,但这两个行都不一定发送到读取管道的进程(除非应用程序刷新输出或设置行缓冲输出模式)。