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

Pause

Фоновый процесс (англ. 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:

  1. Модуль «Службы» для Microsoft Management Console
  2. Утилита sc.exe
  3. Windows PowerShell

Демон

Демон (англ. daemon) — разновидность фонового процесса, предназначенная для постоянной работы в фоновом режиме и ожидания определённых событий или условий[10]. При запуске через специальную функцию такие процессы отсоединяются от родительского терминала[11].

Фоновые задания в 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].

Примечания

  1. ↑ 1 2 Что такое операционная система? Процессы (англ.). The Linux Tutorial. Дата обращения: 14 ноября 2010. Архивировано 15 августа 2020 года.
  2. ↑ Мишель Сайран. Oracle Database Concepts, 10g Release 1 : [англ.]. — Oracle Corporation, 1993-12.
  3. ↑ 1 2 3 Хесус Диас. Как реализовано многозадачное выполнение в новой iPhone OS 4.0 (англ.). Gizmodo (8 апреля 2010). Дата обращения: 14 ноября 2010. Архивировано 2 ноября 2010 года.
  4. ↑ Требуется источник.
  5. ↑ 1 2 Руководство Bash, версия 4.1, основы управления заданиями : [англ.]. — Free Software Foundation, Inc, 2009-12-23.
  6. ↑ Обзор служб (англ.). Microsoft TechNet. Microsoft. Дата обращения: 29 марта 2013. Архивировано 15 марта 2011 года.
  7. ↑ Services (англ.). Microsoft Developer Network. Microsoft. Дата обращения: 29 марта 2013. Архивировано 30 ноября 2006 года.
  8. ↑ New Elevation PowerToys for Windows Vista (англ.). TechNet Magazine. Microsoft (июнь 2008). — «The service CmdAsSystem is configured as interactive whose support is being deprecated. The service may not function properly. The problem is that this script tries to create and start an interactive service. Interactive services will not function correctly due to Session 0 Isolation in Windows Vista.» Дата обращения: 21 июня 2013. Архивировано 13 января 2009 года.
  9. ↑ Services in Windows (англ.). MSDN. Microsoft (18 октября 2010). Дата обращения: 21 июня 2013. Архивировано 17 июня 2011 года.
  10. ↑ Эрик С. Рэймонд. Jargon File, версия 4.4.8, «daemon» : [англ.]. — 2004-10-01.
  11. ↑ raf. Руководство пользователя Linux, «daemon» : [англ.]. — 2010-06-12.
  12. ↑ Оке Норлунд. Background Processes in Unix/Linux (англ.) (7 февраля 2007). Дата обращения: 10 ноября 2010. Архивировано 13 февраля 2012 года.
  13. ↑ POSIX "ps" (англ.). IEEE Std 1003.1, 2004 Edition. Архивировано 11 декабря 2024 года.
  14. ↑ 1 2 Мэтт Бьюкенен. Giz Explains: How Multitasking Works on a Phone (англ.). Gizmodo (29 апреля 2010). Дата обращения: 14 ноября 2010. Архивировано 17 октября 2010 года.

Категории

Pause