Найти статью
Фоновый процесс
Фоновый процесс (англ. background process) — это компьютерный процесс, работающий «в фоновом режиме», то есть без прямого взаимодействия с пользователем[1]. К распространённым задачам, выполняемым такими процессами, относятся ведение журналов, мониторинг системы, планирование заданий[2] и уведомление пользователей[3].
На системах Windows фоновый процесс — это либо компьютерная программа, не создающая пользовательский интерфейс, либо служба Windows (англ. Windows service). Программы первого типа запускаются как любые другие приложения, например через меню «Пуск». Службы Windows, напротив, запускаются диспетчером служб (англ. Service Control Manager). В Windows Vista и новее такие службы работают в отдельной сессии[4].
В системах Unix и Unix-подобного типа фоновый процесс или задание определяется как процесс, чей идентификатор группы процессов (PGID) отличается от идентификатора терминальной группы (TGID). TGID — это идентификатор процесса-главы группы, изначально открывшего терминал (обычно это shell сеанса входа). Такой процесс не получает сигналы с клавиатуры текущего терминала и обычно не выводит в него данные[5]. Эта более техническая дефиниция не делает различий в возможности вмешательства пользователя. Хотя фоновые процессы часто используют для задач с низким потреблением ресурсов, любой процесс может быть переведён в фоновый режим и будет вести себя как обычный, за исключением кейсов, описанных выше[1].
Службы Windows
В семействе Windows NT операционных систем служба Windows — это специализированный фоновый процесс[6]. Служба Windows должна соответствовать интерфейсу и протоколам диспетчера служб, компонента, управляющего службами в Windows[7].
Службы Windows могут быть настроены так, чтобы запускаться при старте операционной системы и работать в фоне, пока Windows остаётся загруженной. Альтернативно, они могут быть стартованы вручную или по внешнему событию. Операционные системы семейства Windows NT включают многочисленные службы, работающие от трёх учётных записей: System, Network Service и Local Service. Эти компоненты Windows часто ассоциированы с процессом Host Process for Windows Services — svchost.exe. Благодаря тому, что службы Windows работают от собственных выделенных учётных записей, они продолжают функционировать даже без активного сеанса пользователя.
До Windows Vista службы, установленные как «интерактивные», могли взаимодействовать с рабочим столом Windows и выводить графический интерфейс пользователя. С выходом Windows Vista поддержка интерактивных служб была объявлена устаревшей — это связано с механизмом изоляции Session 0 (Windows Service Hardening), в результате чего такие службы перестали функционировать корректно[8][9].
Три основных способа управления службами Windows:
- Модуль «Службы» для Microsoft Management Console
- Утилита
sc.exe - Windows PowerShell
Демон
Фоновые задания в Unix
В командной строке Unix фоновый процесс можно запустить с помощью оператора &. Команда bg позволяет возобновить приостановленное задание (отправив ему сигнал SIGCONT), переведя его в фоновый режим. Команда fg возвращает стандартный ввод процесса к терминалу и переводит задание на передний план. Команда jobs выводит список всех процессов, связанных с текущим терминалом, и позволяет оперировать фоновыми заданиями[5][12].
Когда сеанс входа завершается (например, при выходе пользователя или разрыве подключения), все процессы, включая фоновые, обычно автоматически завершаются, чтобы они не становились осиротевшими. При завершении оболочки, отправляется сигнал «hangup» (SIGHUP) всем дочерним процессам, чтобы корректно их завершить. Чтобы процесс продолжил работу после окончания сессии, можно либо не завершать сессию, либо выйти особым образом. Также возможно использовать мультиплексор терминала, чтобы отсоединить виртуальный терминал без завершения процессов; позже к сессии можно подключиться повторно. Для автоматического игнорирования сигнала SIGHUP процесс запускается через команду nohup, или после запуска можно воспользоваться командой disown, чтобы убрать задание из списка или запретить посылку SIGHUP. В итоге такие процессы становятся осиротевшими и «усыновляются» процессом init, продолжая выполнение без сессии — такие процессы также называют демонами.
Пример
В этом примере для Unix утилита sleep была запущена в фоновом режиме, после чего в форграунде была вызвана ps для просмотра процессов. Оба процесса запускались из оболочки[13].
PID TT STAT TIME COMMAND
54659 10 S 0:00.06 su (zsh)
54703 10 IN 0:00.00 - sleep 1000
54852 10 R+ 0:00.00 - ps -U botty -axd
Смартфоны
Современные версии смартфонов и карманных операционных систем поддерживают запуск фоновых процессов. Из-за ограничений аппаратных ресурсов фоновым процессам на мобильных ОС часто задаются ограничения — например, на Android потребление процессора ими может быть ограничено 5-10 %[14]. Приложения в iOS допускают выполнение лишь ограниченного набора функций в фоне[3]. В обеих системах фоновые процессы могут быть завершены системой при превышении лимита на использование памяти[3][14].