Фоновые задачи

Тема дорожной карты · Bash

Фоновые задания в Bash — это процессы, запущенные с конечным оператором &, позволяющим shell-скрипту выполнять несколько задач одновременно без блокировки командной строки — например, long_task & с последующим немедленным another_task &. Bash отслеживает фоновые задания по номеру задания и PID; PID фонового процесса можно получить через $! сразу после запуска, и дождаться его завершения через wait $pid или дождаться всех фоновых заданий через wait. Встроенная команда jobs выводит список работающих и остановленных фоновых процессов в текущей сессии оболочки, тогда как fg %1 и bg %1 перемещают задания между передним и фоновым планом в интерактивном режиме. Для shell-скриптов, параллелизующих работу — таких как загрузка нескольких файлов, параллельный запуск тестов или пакетная обработка лог-файлов на Linux, — фоновые задания в сочетании с wait являются лёгкой альтернативой GNU Parallel или xargs -P. Корректное управление фоновыми заданиями, включая захват их кодов завершения через wait $pid; echo $?, необходимо для надёжной автоматизации Linux и DevOps shell-скриптов.

Как это работает

Фоновые задачи: фоновые задания (cmd &, wait), job control (jobs, fg, bg), command substitution ($(cmd) — современный, `cmd` — legacy), арифметика ($((expr)), (( ))), brace expansion ({1..10}, {a,b,c}), trap-сигналы (trap "..." SIGINT SIGTERM), coproc (coproc cmd { ... } для двунаправленных пайпов), exec (exec cmd заменяет shell).

Когда применять

& + wait — для параллелизации независимых медленных операций (multi-host SSH, batch-загрузки). $() лучше backticks (чище, вкладываемы). trap "cleanup" SIGINT SIGTERM EXIT — для graceful shutdown. Coproc — редко; его особенности нишевые.

Типичные ошибки

Ловушки Фоновые задачи: фоновый запуск без wait (скрипт выходит, jobs убиты); арифметика через expr (медленно, legacy — используйте $(( ))); brace expansion в скриптах для POSIX-совместимости (это bash-расширение); долгие фоновые jobs держат терминал (disown или nohup).

Связанные понятия

Полезные ресурсы