Выполнение в фоновом режиме

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

Чтобы запустить команду в фоновом режиме, достаточно добавить в конце знак «&»:

sleep 3600 &

sleep — команда «И пусть весь мир подождёт». Включает паузу на заданный промежуток времени в секундах.

Если вам нужно переместить на задний план активный процесс, тогда нужно приостановить процесс его выполнения сочетанием Ctrl + Z и ввести в консоли команду bg:

sleep 3600

[приостановка процесса сочетанием Ctrl + Z]

bg

Вывести список команд, запущенных в фоновом режиме, можно с помощью команды 

jobs -l

Важно помнить, что фоновый режим привязан к сессии — при выходе из терминала все процессы, запущенные через него, будут прерваны. Этого можно избежать, выполнив нужную команду через nohup:

nohup sleep 3600 &

Либо, если процесс уже запущен, отвязать его от сессии можно командой disown с идентификатором ID нужной задачи. 

disown -h %ID

После выхода из терминала задание будет удалено из списка jobs, но продолжит выполняться на фоне. Проверить его выполнение можно, отобразив список всех запущенных процессов командой ps aux:

Команды, запущенные в фоновом режиме, при наличии ошибок будут отправлять их в терминал — что не всегда удобно. Можно перенаправить вывод ошибок. В следующем примере ошибки вместо вывода в терминал будут записаны в файл error.log:

sleep 3600 2>>error.log &

Вернуть процесс на передний план можно, введя команду fg. Если процессов несколько, потребуется указать идентификатор задачи ID. Его можно посмотреть в выводе команды jobs -l (число в квадратных скобках).

fg %ID

Отмена процесса, запущенного в фоновом режиме, выполняется с помощью следующей команды:

kill PID

Где PID — ID процесса, указанный в выводе jobs -l. Если процесс завис и не реагирует, можно использовать более грубый вариант:

kill -KILL PID

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *