2014-01-09 1 views
1
Poco::Pipe outputPipe; 
    Poco::Pipe errorPipe; 
    Poco::Process::Env env; 
    Poco::Process::Args arg; 
    Poco::Process::launch(exeFile, arg, workDir, 0 , &outputPipe, &errorPipe, env); 

Я использую вышеуказанный код для создания двух процессов, один правильный, другой неправильный. Затем я меняю кодПеренаправить один процесс stdout в трубу приведет к разности результатов выполнения?

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

Единственная разница в том, что я не перенаправляю stdout и stderr на трубы. Затем я создаю два процесса, теперь все в порядке.

На мой взгляд, я не думаю, что перенаправление stdout и stderr приведет к запуску процесса с разными результатами. Это правильно?

Если я ошибаюсь, какая ситуация изменит ситуацию?

Спасибо.

ответ

1

Есть по крайней мере два способа, что изменения могут иметь значение:

  1. Вы не показываете код, который считывает трубу. Если одна из труб заполняется до того, как код чтения считывает данные, запущенный процесс блокирует запись в трубку до тех пор, пока данные не будут считаны из канала.

  2. Когда выход (в частности) является трубой, выход, скорее всего, будет полностью буферизован, а не буферизирован или не буферизирован. Это может означать, что выход не отображается так быстро, как в примере с непопущенными. Ваша программа может написать строку, а затем выполнить некоторую работу, а затем написать другую строку, но ни одна из них не обязательно отправляется процессу, считывающему канал (если приложение не очищает выходной файл или не устанавливает режим вывода строки).

+0

Вы правы. Мой код, который читает трубы, ошибочен, поэтому заполняет канал и запущенный блок процесса. благодаря – leezii

 Смежные вопросы

  • Нет связанных вопросов^_^