#Linux - Запуск программы в фоновом режиме

К таковым относятся: антивирусы, межсетевые экраны, графические оболочки и т. д.

2018.08.29                        


1.jpeg Фоновый режим — это способ самостоятельного выполнения программы, не требующий вмешательства пользователя. Многие приложения, установленные вместе с операционной системой, начинают свою работу в фоновом режиме при старте системы. К таковым относятся: антивирусы, межсетевые экраны, графические оболочки и т. д.

Для запуска программ в фоновом режиме, не блокирующем окно терминала, необходимо использовать специальный оператор «&». Поставьте этот символ в самом конце строки после указания имени команды, опций и входящих параметров. В общем виде данную последовательность можно записать как «имякоманды —опция входящийпараметр &».

2.jpeg

После нажатия клавиши Enter программа автоматически запустится в фоновом режиме. При этом терминал покажет строку со следующим содержимым «[номерзадания] идентификаторпроцесса», и выдаст приглашение к вводу новой команды.

Если вам нужно перевести в фоновый режим уже работающую программу, нажмите сочетание клавиш Ctrl + Z. Это приостановит выполнение, покажет в терминале номер задания и приглашение к вводу новых команд. Подставьте полученный номер задания в качестве параметра команды bg, что переведет его в фон и автоматом запустит на выполнение. Также вы можете использовать следующую конструкцию «%[номер_задания] &». Она производит аналогичные действия.

3.jpeg

Заметка Согласно сложившейся терминологии и сленгу, программы Linux, выполняемые в фоновом режиме, называются заданиями (англ. Jobs). В интернете присутствует множество статей, где слово задание используется как синоним любой работающей программы. Это в корне не правильно.

Возврат программы в приоритетный режим

Linux позволяет не только запускать программы в фоновом режиме, но и по желанию возвращать к привычному выполнению. Для этого существует два инструмента: команда fg и оператор %. Принцип их действия предельно прост. fg требует указать номер задания в качестве параметра, а к % его нужно подставить сразу после оператора без пробелов.

4.jpeg

Просмотр списка фоновых заданий

Если вы запустили несколько программ в фоне, может появиться потребность отслеживания их состояния. Для этого в Linux есть специальная команда jobs. Она выводит информацию обо всех заданиях, работающих в фоновом режиме, в следующем виде «[номерзадания] статусзадания командавведеннаяпри_запуске». Получить идентификаторы процессов можно добавив опцию -l.

5.jpeg

Три основных статуса фоновых заданий:

Running — программа выполняется в настоящее время либо ожидает своей очереди. В общем, этот статус сигнализирует о нормальном выполнении фонового задания.

Sleeping — задание находится в состоянии ожидания какого-либо сигнала или освобождения определенного ресурса.

Zombie — выполнение данной фоновой задачи прекратилось, но она не высвободила те или иные ресурсы системы. Такой статус сигнализирует об ошибках выполнения и требует ручного уничтожения процесса.

Принудительное завершение заданий

Для завершения работы фоновой программы в Linux нужно использовать команду kill. Это может потребоваться, если задание выполняется слишком долго или оно имеет статус zombie. Команде kill необходимо передать идентификатор процесса, который можно увидеть с помощью jobs с указанием опции -l.

kill также принимает дополнительную опцию, указывающую на характер завершения фоновой задачи. Эта опция не имеет имени и записывается в виде числового значения. Такой вызов в общем виде записывается как** «kill -характерзавершения идентификаторпроцесса».**

6.jpeg

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

15 (SIGTERM) — попытка осуществить завершение работы так, как это произошло бы при нормальных условиях.

9 (KILL) — принудительное завершение. Самый грубый метод. Гарантированно «убивает» процесс без возможности его корректного завершения.

19 (SLEEP) — переводит процесс в статус Sleeping. Ожидает получения другого сигнала для возобновления работы.

18 (CONT) — возобновляет выполнение фоновой задачи, ранее остановленной с помощью сигнала 19.