Открыть сервис

Фоновые процессы в Linux

Фоновые процессы в Linux — это процессы, выполняющиеся в операционной системе без непосредственного взаимодействия с пользователем через терминал. Они запускаются либо самой системой (демоны, системные службы), либо пользователем, который переводит запущенную программу в фоновый режим. В отличие от процессов переднего плана (foreground), фоновые процессы не занимают ввод с клавиатуры и не выводят данные на экран терминала, что позволяет пользователю продолжать работу в командной оболочке.

Управление фоновыми процессами

В командной оболочке Bash и других POSIX-совместимых оболочках управление задачами (job control) реализовано через несколько основных механизмов.

Запуск в фоне

Для запуска команды в фоновом режиме в конце строки добавляется символ амперсанда (&). Например:

``bash sleep 100 & ``

После запуска оболочка выводит номер задачи (job number) в квадратных скобках и идентификатор процесса (PID). Задача продолжает выполняться, а пользователь получает управление терминалом обратно.

Команды управления заданиями

  • jobs — выводит список текущих задач с их статусами (Running, Stopped) и номерами.
  • fg %n — переводит задачу с номером n на передний план.
  • bg %n — возобновляет выполнение остановленной задачи в фоновом режиме.
  • kill %n — отправляет сигнал задаче (по умолчанию SIGTERM).

Для приостановки выполняющейся на переднем плане программы используется комбинация клавиш Ctrl+Z, которая отправляет сигнал SIGTSTP.

Перенаправление ввода-вывода

Фоновый процесс, запущенный без перенаправления, продолжает выводить данные в терминал, что может мешать работе. Рекомендуется перенаправлять стандартный вывод и ошибки в файл или /dev/null:

``bash ./long_script.sh > output.log 2>&1 & ``

Демоны

Особым классом фоновых процессов являются демоны (daemons) — процессы, запускаемые системой и работающие в течение длительного времени. Они выполняют служебные функции: обслуживание сетевых запросов (sshd, nginx), ведение журналов (syslogd), планирование задач (cron) и другие.

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

  • Отсутствие управляющего терминала (TTY).
  • Родительским процессом является init (PID 1) или systemd.
  • Запускаются при загрузке системы через систему инициализации.

Традиционно демоны создаются путём двойной форкизации (fork), что приводит к осиротению процесса и его отсоединению от терминала. В современных системах с systemd демоны запускаются непосредственно менеджером служб.

Сессии и группы процессов

Фоновые процессы организованы в сессии и группы процессов. Сессия объединяет процессы, связанные с одним терминалом. Группа процессов — набор процессов, которым можно отправлять сигналы как единому целому. Управление заданиями в оболочке основано на этих механизмах.

Просмотр фоновых процессов

Для мониторинга фоновых процессов используются стандартные утилиты:

  • ps — показывает состояние процессов с указанием PID, TTY, состояния и команды. Например, ps aux выводит все процессы системы.
  • top / htop — интерактивные мониторы, отображающие нагрузку на процессор и память в реальном времени.
  • pgrep — поиск процессов по имени или другим критериям.
  • pkill — отправка сигналов процессам по имени.

Особенности завершения

При выходе из оболочки фоновые процессы обычно получают сигнал SIGHUP (hang up) и завершаются. Чтобы предотвратить это, используется команда nohup или запуск через setsid. В системах с systemd для этой цели применяются пользовательские службы (user units).

Применение

Фоновые процессы широко используются в администрировании и разработке:

  • запуск длительных операций (резервное копирование, компиляция) без блокировки терминала;
  • работа веб-серверов и баз данных;
  • выполнение периодических задач через cron;
  • запуск приложений с графическим интерфейсом из терминала без привязки к нему.

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

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →