Новости проекта:

Программы скачать
Конкурсы
Заработать на сервер

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

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

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

2.jpg

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

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

3.jpg

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

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

4.jpg

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

5.jpg

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

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

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

6.jpg

Часто используемые коды завершения:
15 (SIGTERM) — попытка осуществить завершение работы так, как это произошло бы при нормальных условиях.
9 (KILL) — принудительное завершение. Самый грубый метод. Гарантированно *«убивает»* процесс без возможности его корректного завершения.
19 (SLEEP) — переводит процесс в статус Sleeping. Ожидает получения другого сигнала для возобновления работы.
18 (CONT) — возобновляет выполнение фоновой задачи, ранее остановленной с помощью сигнала 19.


495
Серверов всего
450
Серверов онлайн
5080
Игроков онлайн
Добавить сервер