Для чего нужен амперсанд (&) в командах Linux?

«Для чего нужен амперсанд (&) в командах Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Амперсанд (&) в конце команды в Linux/Unix-оболочках используется для запуска процесса в фоновом режиме (background). Это освобождает текущую сессию терминала (shell), позволяя продолжать вводить команды, пока процесс выполняется.

Базовый пример:

# Запускает длительную команду (например, компиляцию) в фоне
make build &

После выполнения этой команды вы сразу получите обратно приглашение командной строки и PID (идентификатор процесса).

Ключевые аспекты работы с фоновыми задачами:

  • Управление задачами:
    • jobs -l — показать список фоновых задач текущей сессии.
    • fg %1 — вернуть задачу с номером 1 на передний план (foreground).
    • bg %1 — возобновить остановленную задачу №1 в фоне.
  • Перенаправление вывода: Фоновый процесс все еще может писать в STDOUT/STDERR, что может "засорять" терминал. Лучше сразу перенаправить вывод:
    some_script.sh > script.log 2>&1 &
  • Независимость от терминала: Процесс, запущенный через &, все еще привязан к сессии терминала. Если терминал закрыть, процесс, скорее всего, получит сигнал SIGHUP и завершится. Для полного отсоединения используют:
    • nohup command & — игнорирует сигнал HUP, вывод по умолчанию идет в файл nohup.out.
    • disown после запуска command & — удаляет задачу из списка задач текущей оболочки.
    • Менеджеры процессов (systemd, supervisord) или терминальные мультиплексоры (screen, tmux).