Команды Linux работают в фоновом режиме

задняя часть Linux Shell

Есть два способа запускать команды в фоновом режиме в Linux:

  1. cmd & : запустить в фоновом режиме, закрытие терминала прекратит работу
  2. nohup cmd & : работать в фоновом режиме, закрытие терминала не остановит работу

Способ 1: cmd &

  • CMD и реализация позволяют команде работать в фоновом режиме. Но не помещайте команды с взаимодействием с пользователем в фоновом режиме, поэтому команда будет ожидать ввода данных пользователем в фоновом режиме. Команды, работающие в фоновом режиме, также выводят результаты на консоль, которую можно перенаправить в какой-либо файл, если она не нужна. И стандартный вывод, и вывод ошибок будут перенаправлены в файл с именем cmd.out с помощью следующей команды:
cmd  >  cmd.out  2>&1  &
  • После успешного выполнения команды отобразится идентификатор процесса, который можно использовать для мониторинга (ps -ef | grep идентификатор процесса) или уничтожения (kill -9 идентификатор процесса) процессов.

Способ 2: nohup cmd &

  • При использовании метода 1, когда мы закрываем терминал, команда перестает выполняться. Плюс nohup, чтобы не остановить команду после закрытия терминала. Общая форма этой команды:
nohup command &
  • По умолчанию все выходные данные этой команды перенаправляются в файл nohup.out. Вы также можете использовать следующую команду, чтобы указать выходной файл как nohupcmd.out:
nohup command > nohupcmd.out 2>&1 &
  • Nohup может гарантировать, что команда работает в фоновом режиме только тогда, когда вы обычно выходите из терминала с помощью команды выхода. Также перестанут выполняться фоновые команды аварийного выхода из терминала.

Другие связанные команды:

  • ctrl + z: перевести выполняемую команду на передний план на задний план и оставить команду в состоянии паузы.
  • задания: просмотреть, сколько команд в данный момент выполняется в фоновом режиме, параметр -l отображает PID всех задач.
  • fg: вернуть фоновую команду на передний план для выполнения.
  • bg: поместить вложенные команды для запуска в фоновом режиме.

Команды fg и bg могут использовать fg(bg) %jobid для указания команды выполнения.%jobid — это серийный номер (не pid) команды, выполняемой в фоновом режиме, найденной командой jobs.