Нюансы запуска команды через фоновый режим 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».