06.06.2023

Нюансы запуска команды через фоновый режим Linux

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

Фоновый процесс – это любые команды, работа которых была запланирована юзером в принудительном порядке. Такие действия не будут отображаться на мониторе и не заметны рядовому пользователю. Яркий пример процесса – сервер Apache, обслуживающий веб-страницу, а также скрипты оболочек ПО и команды.

Правила синтаксиса

Работу многих команд, задач и скриптов возможно перестроить под фоновый процесс одним добавлением символа «&». Амперсанд следует поставить в командную строку в самый конец функции. После чего он быстро перенесет скрипты и освободит немного свободного места.

Те скрипты, которые будут работать через фоновый режим, называются заданиями. Синтаксис для их выполнения будет иметь такой вид:

command & script-name & /path/to/command arg1 arg2 & command-1 | command-2 arg1 & command-1 | command-2 -arg1 -arg2 >/path/to/output &

Как это выглядит

Рассмотрим простой пример перевода некоторой команды ls:

$ ls *.py > output.txt &

Для перевода последующего поискового скрипта нужно будет добавить амперсанд после всего выражения:

find . -iname "*.mp3" > myplaylist.txt &

Обнаружение заданий, работающих через фоновые процессы

Чтобы найти команды и скрипты, которые были переведены в фоновый режим, понадобится команда:

jobs

К примеру:

[1]- Running find / -iname "*.c" 2> /dev/null > /tmp/output.txt &
[2]+ Running grep -R "hostNamed" / 2> /dev/null > /tmp/grep.txt &

В этом выражении [1] и [2] являются идентификаторами задания. Для их дальнейшего отображения через идентификатор процесса нужно будет ввести -l:

jobs –l

К примеру:

[1]- 7307 Running find / -iname "*.c" 2> /dev/null > /tmp/output.txt &
[2]+ 7324 Running grep -R "hostNamed" / 2> /dev/null > /tmp/grep.txt &

Если нужно показать только идентификатор процесса, следует написать:

jobs -p

К примеру:

7307
7324

Удаление скриптов, функционирующих через фоновый режим

Если юзеру понадобилось постепенно или принудительно завершить фоновый процесс одной из задач, следует воспользоваться командой «kill»:

kill PID
kill -15 PID
kill -9 PID
killall process-Name-Here
killall -15 process-Name-Here
killall -9 process-Name-Here

Перемещение фонового процесса на место приоритетного

Для выполнения перемещений используется:

%JOB-ID

Либо

fg JOB-ID

Поначалу выводятся все текущие фоновые процессы при помощи синтаксиса:

jobs -l

К примеру:

[1]- 7307 Running find / -iname "*.c" 2> /dev/null > /tmp/output.txt &
[2]+ 7324 Running grep -R "hostNamed" / 2> /dev/null > /tmp/grep.txt &

Перевод задания со вторым идентификатором осуществится благодаря команде:

%2 ЛИБО fg 2

Как можно вывести данные:

grep -R "hostNamed" / 2> /dev/null > /tmp/grep.txt

Если потребуется приоритетные задания сделать снова фоновыми, достаточно будет удерживать «CTRL» и одновременно нажать «Z». Все работающие приоритетные задачи будут остановлены на некоторое время.

Возвращение к фоновому режиму будет проводиться так:

%2 & ЛИБО bg

Таким образом «grep» вернется к фоновому режиму.

Наиболее полезные команды

Описание Команда
Покажет все выполняемые задания, а также их идентификаторы jobs
jobs -l
ps aux
Переведет команду или скрипт для работы в приоритетном режиме command &
/path/to/command &
/path/to/script arg1 &
Переведет фоновое задание для работы в приоритетном режиме fg n
%n
Переведет команду обратно к фоновому режиму, не запрашивая его отмену bg n
%n &

Под «n» подразумевается идентификационный номер заданий, он выводится при выполнении команды «jobs».