Гид по технологиям

Как запустить команды Linux в фоновом режиме

6 min read Linux Обновлено 25 Dec 2025
Запуск команд Linux в фоновом режиме — 6 методов
Запуск команд Linux в фоновом режиме — 6 методов

Кратко: Вы узнаете шесть надёжных способов запустить процесс в фоновом режиме: & (амперсанд), bg/fg, nohup, перенаправления, disown и tmux. В конце — советы по выбору метода, устранению проблем и чек-листы для разных ролей.

Терминал Linux: отправка команд в фоновый режим

Команды Linux позволяют взаимодействовать с системой через терминал. Иногда задача занимает много времени, и ждать неудобно — либо вы блокируете сессию, либо открываете новую оболочку. К счастью, есть проверенные приёмы, чтобы запустить команды в фоне и освободить терминал, не теряя выполнения задачи.

Что значит «запустить в фоне» — одно предложение

Запуск в фоне означает, что процесс выполняется независимо от активной оболочки: вы получаете обратно приглашение терминала и можете продолжать работу.

Быстрый обзор методов

  • & — самый простой способ: оболочка запустит процесс в фоне.
  • Ctrl+Z + bg/fg — отправляет уже запущенный процесс в фон и возвращает его в передний план при необходимости.
  • nohup — делает процесс устойчивым к закрытию оболочки (SIGHUP).
  • Перенаправление вывода + & — удобно, когда нужно сохранять логи в файл или отбрасывать вывод.
  • disown — отделяет задачу от текущей оболочки (не будут посылаться SIGHUP).
  • tmux/screen — терминальные мультиплексоры для долгоживущих сессий.

1. Добавьте амперсанд (&) после команды

Проще всего запустить процесс в фоне — добавить символ & в конце команды. Это говорит Bash: запусти процесс в фоне и верни контроль пользователю.

gedit &

Пример запуска команды с амперсандом (&) в терминале

Аналогично для скрипта:

./script.sh &

Когда использовать: короткие фоновые задачи, интерактивные GUI-программы и быстрые фоновые запускa.

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

2. Используйте Ctrl+Z и bg, чтобы отправить уже запущенную команду в фон

Если команда уже выполняется и вы поняли, что хотите освободить терминал, нажмите Ctrl+Z — это приостановит процесс (SIGTSTP). Затем выполните:

bg

чтобы возобновить её в фоновом режиме.

Использование bg после Ctrl+Z для отправки процесса в фон

Просмотреть фоновые задания:

jobs

Вернуть задание на передний план:

fg       # последний фон
fg %2    # задание с ID 2

Завершить фоновое задание по номеру:

kill %2

Когда использовать: интерактивная работа, где вы случайно запустили длительную задачу и хотите временно освободить терминал.

3. nohup — фон, устойчивый к выходу из оболочки

Команда nohup предотвращает завершение процесса при закрытии терминала (игнорирует SIGHUP). Пример использования:

nohup sudo nmap -sS --top-ports=15 192.168.1.1/24 &

nohup по умолчанию пишет вывод в файл nohup.out в текущей директории или в $HOME, если прав нет.

Вывод nohup.out, команда nohup в фоне

Советы:

  • Явно перенаправляйте stdout и stderr, чтобы лог был аккуратным: nohup mycmd >mylog 2>&1 &.
  • nohup не решает проблемы с терминальными зависимостями (например, если программа требует tty).

Когда использовать: удалённые сессии (SSH), долгие задачи, которые должны продолжаться после выхода.

4. Системные перенаправления вывода + &

Часто нужно сохранить вывод в файл или полностью отбросить. Пример для ping:

ping -c5 8.8.8.8 > output.log 2>&1 &

Здесь stdout переадресован в output.log, stderr (2) перенаправлен на stdout (&1), и & отправляет процесс в фон.

Перенаправление вывода в файл и запуск команды в фоне (&)

Если вы хотите отбросить вывод полностью, используйте /dev/null:

my_heavy_job > /dev/null 2>&1 &

Когда использовать: автоматизация, cron-подобные задачи, сбор логов фоновых задач.

5. disown — отсоединить процесс от оболочки

Если вы запустили процесс с & и хотите, чтобы он пережил выход из оболочки, можно выполнить:

gedit &
disown

disown удаляет задание из таблицы задач текущей оболочки, так что при выходе процесс не получит SIGHUP.

Команда disown отделяет процесс от оболочки

Замечание: disown не создаёт логов; если вы хотите видеть вывод, следует заранее перенаправить stdout/stderr.

6. Используйте tmux (или screen) для долгоживущих сессий

tmux — это терминальный мультиплексор. Он позволяет запускать процессы в «сессиях», которые продолжают выполняться, даже если вы отсоединитесь.

tmux new -d 'ping -c 10 8.8.8.8 > output.log'

Команда выше создаёт новую tmux-сессию в фоне и запускает ping. Вы можете потом подключиться к сессии:

tmux attach -t session_name

tmux: запуск команды в отдельной сессии в фоне

Когда использовать: интерактивные долгие процессы, отладки на удалённой машине, восстановление сеанса после отключения сети.

Когда какой метод выбрать — краткое руководство

  • Нужен простой быстрый фон — используйте &.
  • Уже запустили процесс — Ctrl+Z → bg.
  • Должно продолжаться после выхода — nohup или disown, либо tmux/screen.
  • Нужны логи — перенаправляйте stdout/stderr в файл.
  • Требуется управляемая, перезапускаемая служба — рассмотрите systemd-сервис.

Примеры альтернатив и продвинутые подходы

  • systemd user-сервисы для контроля автозапуска, логирования (journald) и восстановления на сбое.
  • setsid — запускает процесс в новой сессии: setsid mycmd &.
  • cron @reboot для задач, которые нужно запускать после старта системы.

Ментальные модели и эвристики

  • «Жизненный цикл процесса»: запуск → фон/передний план → завершение. Поймите, что произойдёт при закрытии оболочки (SIGHUP).
  • «Вывод и следы»: если нужен анализ, заранее перенаправьте stdout/stderr в файл.
  • «Управление и наблюдаемость»: для продакшна используйте systemd или контейнеры, а не ad‑hoc nohup.

Опасности и крайние случаи

  • Zombie-процессы: если потомок завершился, а родитель не прочитал статус, появится зомби. Удаляются вызовом wait в родительском процессе или kill родителя.
  • Ресурсные утечки: фоновые процессы могут потреблять CPU, память и I/O — мониторьте их.
  • Зависимости от tty: некоторые программы требуют терминала; nohup не даёт псевдо-tty. Используйте tmux/screen или nohup вместе с перенаправлением ввода/вывода.

Важно: не оставляйте фоновые процессы без логирования и мониторинга в продуктивной среде.

Чек-листы по ролям

Для системного администратора

  • Выбрать метод: systemd, tmux или nohup?
  • Настроить логирование (файлы или journald).
  • Ограничить ресурсы (cgroups/systemd ResourceControl).
  • Добавить мониторинг и алерты.

Для разработчика

  • Записать stdout/stderr в файл.
  • Убедиться, что программа корректно обрабатывает сигнал SIGHUP.
  • Тестировать поведение при отключении SSH.

Для автоматизации (CI/CD)

  • Использовать systemd unit или container для стабильности.
  • Обновлять конфигурацию развертывания и rollback-план.

SOP: запустить долгий процесс безопасно (минимум шагов)

  1. Оцените: нужен ли фон только на время сессии или после выхода — выбирайте &/bg или nohup/disown/tmux.
  2. Подготовьте лог: > /var/log/myjob.log 2>&1 или другой файл с ротацией.
  3. Запустите команду: nohup mycmd > /var/log/myjob.log 2>&1 & или tmux new -d 'mycmd > /var/log/myjob.log'.
  4. Зафиксируйте PID и добавьте проверку статуса.
  5. Настройте мониторинг и ротацию логов.

Отладка и удаление «зависших» фоновых процессов

  • Посмотреть процессы: ps aux | grep mycmd.
  • Убить процесс: kill PID или kill -9 PID только если нужно.
  • Найти зомби: ps aux | grep Z.

Критерии приёмки

  • Процесс продолжает работать после выхода из SSH (если это требовалось).
  • Логи доступны и обновляются.
  • Ресурсы не превышают установленные лимиты.
  • Повторный запуск/стоп возможен без вмешательства оператора.

Небольшая таблица выбора (эмпирическая эвристика)

  • Кратковременный, не важный → &: просто и быстро.
  • Долгий, должен пережить logout → nohup/disown или tmux.
  • Нужен контроль, перезапуск и логирование → systemd.

Рисковая матрица и способы снижения рисков

  • Потеря логов → всегда перенаправляйте вывод в файлы или используйте journald.
  • Перегрузка системы → лимитируйте ресурсы через cgroups или systemd.
  • Неправильное завершение → тестируйте реакции процессов на SIGTERM/SIGHUP.

Пример принятого рабочего процесса

  1. Для одноразовой фоновой команды: myjob > ~/logs/myjob.log 2>&1 &.
  2. Для долгоживущей службы: создать systemd unit с Restart=on-failure и логированием в journald.
  3. Для интерактивной отладки: tmux new -s debug и запуск внутри сессии.

Decision tree

flowchart TD
  A[Нужно ли, чтобы процесс продолжался после выхода?] -->|Нет| B[Использовать & или bg]
  A -->|Да| C{Требуется интерактивность?}
  C -->|Да| D[Использовать tmux/screen]
  C -->|Нет| E{Нужно логирование и рестарт?}
  E -->|Да| F[Создать systemd unit]
  E -->|Нет| G[Использовать nohup или disown с перенаправлением]

Краткая сводка

  • & и bg — быстрые способы для интерактивного использования.
  • nohup и disown защищают от SIGHUP, но не дают tty.
  • tmux/screen — лучший выбор для интерактивных долгих задач и восстановления сессий.
  • Для продакшн‑задач предпочитайте systemd: лучше управление, логирование и восстановление.

Если оставить программы в фоне надолго, они могут стать зомби или вызвать утечки ресурсов — периодически проверяйте фоновые процессы и логи.

Итог

Используйте амперсанд и bg для быстрого освобождения терминала. Для надёжного выполнения после выхода — nohup/disown или tmux. Для производства и автоматизации — systemd. Всегда логируйте и контролируйте ресурсы.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как скрывать спойлеры в Telegram — Desktop и Mobile
Мессенджеры

Как скрывать спойлеры в Telegram — Desktop и Mobile

Найти музыку для Reels в Instagram
Instagram

Найти музыку для Reels в Instagram

Установка .deb на Ubuntu 16.04 без GNOME Software
Ubuntu

Установка .deb на Ubuntu 16.04 без GNOME Software

Кастомные эмодзи в Discord — добавление и управление
Инструкции

Кастомные эмодзи в Discord — добавление и управление

Todoist для фитнеса: план, трекинг и привычки
Фитнес

Todoist для фитнеса: план, трекинг и привычки

Перезагрузка и сброс Roomba — инструкция
Руководства

Перезагрузка и сброс Roomba — инструкция