Есть два способа запускать команды в фоновом режиме в Linux:
- cmd & : запустить в фоновом режиме, закрытие терминала прекратит работу
- 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.