Запуск команд в фоновом режиме Linux

Как запустить команду в фоновом режиме, чтобы сразу получить доступ к интерфейсу командной строки?

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

Синтаксис

Задачу (например, команду или скрипт) можно перевести в фоновый режим, добавив символ «&» в конец командной строки. Этот оператор переводит команду в фоновый режим и освобождает место в терминале. Команда, выполняемая в фоновом режиме, называется заданием. Во время работы фоновой команды можно выполнять любые другие команды. Синтаксис выглядит следующим образом:

<span class="hljs-built_in">command</span> &amp; script-name &amp; /path/to/<span class="hljs-built_in">command</span> arg1 arg2 &amp; <span class="hljs-built_in">command</span>-1 | <span class="hljs-built_in">command</span>-2 arg1 &amp; <span class="hljs-built_in">command</span>-1 | <span class="hljs-built_in">command</span>-2 -arg1 -arg2 &gt;/path/to/output &amp;

Примеры

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

$ ls *.py &gt; output.txt &amp;

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

find . -iname <span class="hljs-string">"*.mp3"</span> &gt; myplaylist.txt &amp;

Как найти задания, работающие в фоновом режиме?

Выполните следующую команду:

<span class="hljs-built_in">jobs</span>

Пример вывода данных:

[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:

<span class="hljs-built_in">jobs</span> –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 &

Чтобы отобразить только идентификаторы процессов, введите:

<span class="hljs-built_in">jobs</span> -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

ИЛИ

<span class="hljs-built_in">fg</span> JOB-ID

Сначала следует вывести список текущих заданий с помощью команды jobs. Для этого введите:

<span class="hljs-built_in">jobs</span> <span class="hljs-_">-l</span>

Пример вывода данных:

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

Чтобы перевести задание job id #2 в приоритетный режим, введите:

%2

ИЛИ используйте команду:

<span class="hljs-built_in">fg</span> 2

Пример вывода данных:

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

Чтобы перевести это задание обратно в фоновый режим, нажмите клавишу Z, удерживая клавишу CTRL. При этом выполнение текущего приоритетного задания будет приостановлено. Введите следующую команду, чтобы перевести задание в фоновый режим:

%2 &amp;

ИЛИ используйте команду:

<span class="hljs-built_in">bg</span>

Теперь командное задание grep будет работать в фоновом режиме.

Краткое описание всех полезных команд

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

Примечание: n — это id задания (id задания можно узнать, выполнив команду jobs).