Фоновый процесс — это компьютерный процесс , который выполняется за кулисами (т. е. в фоновом режиме) и без вмешательства пользователя. [1] Типичные задачи для этих процессов включают ведение журнала, мониторинг системы, планирование [2] и уведомление пользователя. [3]
В системе Windows фоновый процесс — это либо компьютерная программа , которая не создает пользовательский интерфейс , либо служба Windows . Первые запускаются так же, как и любая другая программа, например, через меню «Пуск» . Службы Windows, с другой стороны, запускаются диспетчером управления службами . В Windows Vista и более поздних версиях они запускаются в отдельном сеансе . [ требуется цитата ]
В Unix или Unix-подобной системе фоновый процесс или задание могут быть дополнительно идентифицированы как те, чей идентификатор группы процессов отличается от идентификатора его терминальной группы (TGID). (TGID процесса — это идентификатор процесса лидера группы процессов, который открыл терминал, который обычно является оболочкой входа в систему. TGID идентифицирует управляющий терминал группы процессов.) Этот тип процесса не может получать сигналы клавиатуры от своего родительского терминала и, как правило, не отправляет вывод на этот терминал. [4] Это более техническое определение не различает, может ли процесс получать вмешательство пользователя. Хотя фоновые процессы обычно используются для целей, требующих небольшого количества ресурсов, любой процесс может быть запущен в фоновом режиме, и такой процесс будет вести себя как любой другой процесс, за исключениями, указанными выше. [1]
В семействе операционных систем Windows NT служба Windows представляет собой выделенный фоновый процесс. [5] Служба Windows должна соответствовать правилам интерфейса и протоколам диспетчера управления службами , компонента, отвечающего за управление службами Windows. [6]
Службы Windows можно настроить на запуск при запуске операционной системы и на работу в фоновом режиме, пока работает Windows. Кроме того, их можно запускать вручную или по событию. Операционные системы Windows NT включают в себя многочисленные службы , которые работают в контексте трех учетных записей пользователей : System
, Network Service
и Local Service
. Эти компоненты Windows часто связаны с хост-процессом для служб Windows: svchost.exe . Поскольку службы Windows работают в контексте собственных выделенных учетных записей пользователей, они могут работать, когда пользователь не вошел в систему.
До Windows Vista службы, установленные как «интерактивные службы», могли взаимодействовать с рабочим столом Windows и отображать графический пользовательский интерфейс . Однако с появлением Windows Vista интерактивные службы стали устаревшими и перестали работать должным образом в результате Windows Service Hardening . [7] [8]
Три основных способа управления службами Windows:
sc.exe
Демон — это тип фонового процесса, предназначенный для непрерывной работы в фоновом режиме, ожидающий возникновения событий или выполнения условий. [9] При запуске с помощью функции демона демоны отсоединяются от своего родительского терминала. [10]
Из командной строки Unix фоновый процесс может быть запущен с помощью оператора "&". Команда bg может возобновить приостановленное задание (отправив SIGCONT ), запустив его в фоновом режиме. Использование команды fg также восстановит стандартный ввод его родительского терминала, выводя его на передний план. Команда jobs выведет список всех процессов, связанных с текущим терминалом, и может использоваться для вывода фоновых процессов на передний план. [4] [11]
Когда сеанс входа завершается через явный выход из системы или отключение от сети, все процессы, включая фоновые процессы, по умолчанию завершаются, чтобы предотвратить их превращение в бесхозные процессы . Конкретно, когда пользователь выходит из процесса запуска оболочки, в рамках завершения работы он отправляет сигнал зависания ( SIGHUP ) всем его заданиям , чтобы завершить все процессы в соответствующей группе процессов . Чтобы процессы продолжали выполняться, можно либо не завершать сеанс, либо завершить сеанс без завершения процессов. Терминальный мультиплексор можно использовать, чтобы оставить сеанс запущенным, но отсоединить от него виртуальный терминал, оставив процессы запущенными как дочерние процессы сеанса; затем пользователь может снова подключить сеанс позже. Или завершение можно предотвратить, либо запустив процесс с помощью команды nohup (сообщив процессу игнорировать SIGHUP), либо впоследствии запустив его disown
с идентификатором задания, что либо полностью удалит задание из списка заданий, либо просто предотвратит отправку SIGHUP. В последнем случае, когда сеанс завершается, дочерние процессы не завершаются, либо потому что им не отправляется сигнал SIGHUP, либо потому что они его игнорируют, и, таким образом, становятся процессами-сиротами, которые затем принимаются процессом init (ядро устанавливает процесс init в качестве своего родительского), и они продолжают работать без сеанса, теперь называемые демонами .
В этом примере, запущенном на Unix , утилита sleep была запущена в фоновом режиме. После этого инструмент ps был запущен в фоновом режиме, где он вывел следующий текст. Оба были запущены из оболочки. [12]
PID TT STAT ВРЕМЯ КОМАНДА 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%. [13] Приложения на iOS от Apple ограничены подмножеством функций при работе в фоновом режиме. [3] Как на iOS, так и на Android фоновые процессы могут быть завершены системой, если они используют слишком много памяти. [3] [13]
Служба CmdAsSystem настроена как интерактивная, поддержка которой устарела. Служба может работать некорректно. Проблема в том, что этот скрипт пытается создать и запустить интерактивную службу. Интерактивные службы не будут работать корректно из-за изоляции сеанса 0 в Windows Vista.