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重定向到管道。然后我创建了两个进程,现在可以了。
在我看来,我不认为重定向stdout和stderr会导致进程运行不同的结果。是不是?
如果我错了,会有什么情况会有所不同?
感谢。
答案 0 :(得分:1)
改变至少有两种方式可以产生影响:
您不会显示读取管道的代码。如果其中一个管道在读取代码读取数据之前填充,则启动的进程将阻止写入管道,直到从管道读取数据。
当输出(特别是)是管道时,输出可能是完全缓冲的,而不是行缓冲或无缓冲。这可能意味着输出不会像unpiped示例中那样迅速出现。你的程序可能会写一行,然后做一些工作,然后写另一行,但这些都不必发送到读取管道的进程(除非应用程序刷新输出,或设置行缓冲输出模式)。 / p>