Связь вывода между двумя одновременными независимыми программами

Примечание: Вопрос был отредактирован (трубопровод поменялся местами) после написания этой статьи. Я обновлю его, если найду на это время.

Каждая часть конвейера запускается одновременно с другими. Единственное, что синхронизирует конвейер - это ввод/вывод, т.е. процесс, ожидающий, пока другой процесс в конвейере прочитает его вывод или предоставит ввод.

Вашему somescript скрипту придется ждать и следить за вводом от nc для запроса, прежде чем вывести имя файла.

Не зная, что делает этот скрипт, я могу только предположить, что у него могут быть проблемы с разбором.

1
19.04.2016, 04:56
1 ответ

Вы не указали оболочку, поэтому, как правило, проще всего использовать именованные каналы. Однако, если ваша оболочка их поддерживает, это может быть хорошим вариантом использования сопроцессов.

Как использовать команду coproc в Bash?

В a | cmd | b , a передает данные в cmd , а b считывает его вывод. Выполнение cmd в качестве сопроцесса позволяет оболочке быть одновременно a и b .

В bash:

coproc ./chess_1
./chess_2 < "${COPROC[0]}" > "${COPROC[1]}"

Связанный пост также говорит о недостатках сопроцессов и содержит примеры использования именованных каналов (через mkfifo ).

1
27.01.2020, 23:48

Теги

Похожие вопросы