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

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

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

решение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

Связанный контент