Как выполнить задачу в фоновом режиме?

Можно ли запустить задачу или скрипт, запущенный из терминала в фоновом режиме?

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) он пойдет в терминал, если вы не закроете его, и в этом случае поведение будет совершенно неопределенным. Рекомендуется позаботиться о выводе фонового процесса с помощью перенаправления.

Добавлять & в команду.

Пример:

$ cp FromA ToB &

Этот пример будет запускать обновления в фоновом режиме:

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
Другие вопросы по тегам