Сопроцессы. Теория. Часть первая.

Надеюсь, все знают, что в Bash можно запустить любую программу в фоновом режиме. Для этого после команды достаточно указать &. Например: sleep &

В этом случае программа начинает жить своей жизнью, а переменная $! получает PID последнего запущенного процесса, чтобы можно было отследить завершение фонового процесса, а при крайней необходимости сказать знаменитую фразу Тараса Бульбы.

Для контроля и управления фоновыми заданиями служат команды jobs, bg, fg.

Если будет интересно — напишите комменты — рассмотрю их подробнее. Сейчас не об этом. В Bash, начиная с четвёртой версии, появились сопроцессы (coproc). Иногда их называют копроцессы, но мне слово не нравится. Чем-то оно попахивает.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
С помощью этой команды можно запустить любой процесс в фоновом режиме, но, в отличие от обычного фонового режима, процесс, запущенный через coproc, связывается через дескрипторы с основной оболочкой, и с ним можно взаимодействовать.

Форма запуска:

coproc [NAME] command [redirections]

NAME — имя индексного массива, в котором содержатся дескрипторы command. Если NAME не задано, по умолчанию используется COPROC.

COPROC[0] связан с stdout command, COPROC[1] — с stdin. И с помощью этих дескрипторов мы сможем взаимодействовать с command, несмотря на то, что программа работает в фоновом режиме.

Сразу хочу обратить внимание. Если задано NAME, вместо command необходимо использовать группировку, даже из одной команды:

coproc [NAME] { command [redirections]; }

Иначе coproc поймёт NAME как команду, а command — как её параметры. И да, при группировке пробелы и точка с запятой очень важны. Добро пожаловать в Bash.

Пока всё не так просто, как хочется, но практика всё расставит по местам, а заодно научимся принимать почту от POP3-сервера с SSL.