
Можно ли запустить задачу или скрипт, запущенный из терминала, в фоновом режиме?
решение1
Здесь есть несколько ответов, в зависимости от того, что вы хотите (этот ответ действителен в оболочках 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
) он попадет на терминал, если вы его не закроете, в этом случае поведение совершенно не определено. Хорошей практикой будет самостоятельно позаботиться о выводе фонового процесса, используяперенаправление.
решение2
добавить &
к команде.
Пример:
$ cp FromA ToB &
решение3
В этом примере обновления будут запускаться в фоновом режиме:
sudo apt-get dist-upgrade -y &
Просто обратите внимание на один &.
Если вы хотите скрыть stdout, сделайте следующее:
sudo apt-get dist-upgrade -y > /dev/null &
решение4
Если вам нужны более продвинутые возможности и вы хотите иметь возможность использовать сеанс позже локально или по SSH, вы можете использовать screen.
# screen
# apt-get update -y
Затем нажмите CTRL+, Aа затем D.
Позже вы сможете прикрепить снова:
# screen -rd