Сопроцессы. Теория. Часть первая.
Надеюсь, все знают, что в Bash можно запустить любую программу в фоновом режиме. Для этого после команды достаточно указать &. Например: sleep &
В этом случае программа начинает жить своей жизнью, а переменная $! получает PID последнего запущенного процесса, чтобы можно было отследить завершение фонового процесса, а при крайней необходимости сказать знаменитую фразу Тараса Бульбы.
Для контроля и управления фоновыми заданиями служат команды jobs, bg, fg.
Если будет интересно — напишите комменты — рассмотрю их подробнее. Сейчас не об этом. В Bash, начиная с четвёртой версии, появились сопроцессы (coproc). Иногда их называют копроцессы, но мне слово не нравится. Чем-то оно попахивает.
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.








Комментарии