Как выполнить задачу в фоновом режиме?
Можно ли запустить задачу или скрипт, запущенный из терминала в фоновом режиме?
4 ответа
Здесь есть несколько ответов, в зависимости от того, что вы хотите (этот ответ действителен в bash
а также zsh
раковины, другие могут отличаться).
Если вам нужно запустить команду в фоновом режиме, и вы знаете ее перед запуском, просто добавьте &
в конце команды (используя sleep 60
, ничего не делать в течение 1 минуты, как пример команды):
[romano:~] % sleep 60 &
[1] 9054
1& [romano:~] %
Если вы уже запустили его, вы можете остановить его с помощью ctrl-Z, а когда оболочка выдаст вам приглашение, вы можете выполнить фон с помощью команды bg
:
1& [romano:~] % sleep 60
^Z
[1] + 9084 suspended sleep 60
1z [romano:~] 20 % bg
[1] + 9084 continued sleep 60
1& [romano:~] %
В обоих случаях процесс / задание все еще привязано к вашему терминалу; если вы закроете свой терминал, процессу будет отправлен сигнал зависания (HUP) - тогда большинство процессов будет корректно завершено. Если вам нужно убедиться, что процесс будет продолжен, вы можете запустить его с:
nohup sleep 60 &
или, отправив его на задний план с bg
или с простым &
Скажите оболочке забыть об этом, используя:
disown %%
(%%
является ярлыком управления заданием, и здесь обозначает последний процесс, отправленный в фоновом режиме).
Затем вы должны принять во внимание выходные данные процесса - в первых двух случаях выходные данные все равно поступят на терминал; в случае nohup
он будет перенаправлен в файл с именем nohup.out
и в последнем случае (с disown
) он пойдет в терминал, если вы не закроете его, и в этом случае поведение будет совершенно неопределенным. Рекомендуется позаботиться о выводе фонового процесса с помощью перенаправления.
Этот пример будет запускать обновления в фоновом режиме:
sudo apt-get dist-upgrade -y &
Просто обратите внимание на певец &.
Если вы хотите скрыть стандартный вывод, сделайте следующее:
sudo apt-get dist-upgrade -y > /dev/null &
Если вы хотите продвинуться дальше и хотите использовать сеанс позже локально или по SSH, вы можете использовать screen.
# screen
# apt-get update -y
Затем нажмите CTRL+A, а затем D.
Позже вы можете прикрепить:
# screen -rd