Содержание

Команды управления заданиями Linux fg, bg, jobs, nohup

Управление заданиями - это механизм для отслеживания процессов, которые порождаются из текущего сеанса работы с терминалом. Можно запустить любое число заданий. Они могут работать, завершиться или находиться в других состояниях. Для управления заданиями можно использовать несколько команд, чтобы проследить результаты их работы или потребовать от системы уведомления об окончании задания.

В Linux существует три основных типа процессов:

  1. Процессы переднего плана (или «интерактивные процессы») — инициализируются и управляются с помощью терминального сеанса. То есть процессы запущенные пользователем в командной строке.
  2. Фоновые процессы (или «автоматические процессы») — это процессы, не подключенные к терминалу; они не ожидают пользовательского ввода данных. Таким образом, другие процессы могут выполняться параллельно с процессом, запущенным в фоновом режиме, поскольку им не нужно ждать его завершения.
  3. Демоны (англ. «daemons») — это особый тип фоновых процессов, которые запускаются при старте системы и продолжают работать в виде службы.

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

Фоновый режим позволяет продолжить использование сеанса работы с терминалом, пока выполняется команда. Для запуска команды в фоновом режиме, достаточно к команде добавить символ амперсанд (&). Командный интерпретатор вернет номер задания и идентификатор процесса:

$ make &
[2] 254
$

Если задание не требует от пользователя ввода, оно продолжает свою работу до полного завершения. Если команде нужен ввод, она переходит в состояние ожидания, на экран выводится соответствующее уведомление, которое выглядит примерно так:

[1] + Suspended (tty input) programm 0

В данном случае в ожидании ввода приостановилось выполнение программы programm. Пользователю необходимо перевести из фонового режима в привилегированный и выполнить ввод.

Если вы хотите, чтобы после вашего выхода из системы(консоли) процесс в фоновом режиме продолжал выполняться, то вам необходимо использовать команду Использование nohup в Linux для запуска скриптов в фоновом режиме.

jobs просмотр состояния запущенных заданий

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

$ jobs
[1]   Stopped (user)          du
[2]-  Stopped (user)          du -a /home/intdbi
[3]+  Stopped (user)          du -r /home/intdbi
$

Команда jobs принимает два флага. Флаг -l включает идентификатор процесса с номером задания.

$ jobs -l
[1]   1351 Stopped (user)          du
[2]-  1381 Stopped (user)          du -a /home/intdbi
[3]+  1383 Stopped (user)          du -r /home/intdbi
$

Флаг -р заменяет номер задания на идентификатор процесса.

$ jobs -p
1351
1381
1383
$

Идентификатор процесса может использоваться при обращении к команде Использование ps для мониторинга процессов.

Номера заданий

Номер задания позволяет командному интерпретатору наблюдать за процессами. Его можно рассматривать как головной элемент группы процессов, поскольку пользовательское задание порождает любые команды либо в конвейере, либо, как подзадания.

fg перевод задания в привилегированный режим (передний план)

Команда fg переводит задания в привилегированный режим. При наличии приостановленного задания, его можно сделать привилегированным (перевести на передний план) с помощью команды fg #номер_задания (или fg номер_задания в bash). После этого задание либо выведет на экран сообщение о том, что ему нужно от терминала, либо будет принимать ожидаемый ввод. Переведя задание в привилегированный режим, можно приостановить его выполнение, нажав комбинацию калвиш Ctrl-Z, и заняться им позже.

Любое задание из списка, предоставленного командой jobs, доступно, если пользователь захочет сделать его привилегированным, даже в том случае, когда оно уже работает в фоновом режиме. Если в этом списке приведено только одно задание, то при использовании команды fg пользователю не нужно задавать его номер. Если номер задания не задан, предполагается текущее задание.

bg перевод задания в фоновый режим

С помощью команды bg (background) можно возобновить в фоновом режиме работу приостановленного или остановленного задания. Для этого нужно указать соответствующий номер задания, после чего оно перейдет в фоновый режим, и будет работать до своего завершения, или пока ему снова не потребуется ввод с терминала.

Пример использования bg:

  1. Запустите процесс (например, vim).
  2. Приостановите его, нажав Ctrl + Z.
  3. Выполните bg, чтобы продолжить выполнение приостановленного процесса в фоне.

wait команда ожидания завершения процесса

Это последняя существенная команда управления заданиями. При вводе wait приостанавливается работа командного интерпретатора до тех пор, пока не будут завершены все фоновые задания. Сюда входят и любые остановленные задания, поэтому при вводе wait стоит убедиться, что все фоновые задания работают. Команда wait может также принимать в качестве параметра номер задания. В этом случае командный интерпретатор приостанавливается до тех пор, пока не завершится выполнение указанного задания.

nice задать приоритет выполнения

Команда nice запускает новую задачу с заданным уровнем приоритета (низкое значение приоритета означает более высокий приоритет).

Пример использования:

  1. Запустите задачу с изменённым приоритетом, например:
    nice -n 5 find / -name "myfile.txt"
  2. Значение -n 5 задаёт приоритет задачи.

renice изменить приоритет уже запущенного процесса

renice изменяет приоритет уже запущенного процесса.

Пример использования:

  1. Сначала найдите идентификатор процесса (PID) с помощью ps.
  2. Затем измените приоритет с помощью renice. Например: renice -n 10 -p 1234, где 1234 - это PID процесса.

Заключение

Эти команды позволяют эффективно управлять процессами и ресурсами в Linux, оптимизируя работу системы в соответствии с вашими потребностями.