Как я могу запустить команду из терминала, не блокируя ее?


45

Я запускаю множество программ в Ubuntu из терминала, но я хотел бы иметь возможность продолжать использовать терминал после того, как у меня откроется программа. Как я могу поместить программы в фоновом режиме, чтобы мне не нужно было открывать другое окно?

Ответы:


60

Существуют разные способы запуска программы терминала и продолжения использования терминала:

  • Вы можете открыть другую вкладку терминала (щелкните правой кнопкой мыши, затем выберите «Открыть новую вкладку»).
  • Вы можете добавить &к команде, которую вы запускаете. Имейте в виду, что вы не увидите текстовый вывод на терминал, например сообщения об ошибках.
  • Вы можете напечатать Ctrl- Zи затем запустить bg. Это имеет тот же эффект, что и бегcommand &
  • Вы можете запустить nohup command &и затем нажать Enter. (Спасибо ccpizza , см. Комментарии ниже.)

Однако нажатие Alt- F2и затем запуск вашей команды из графического интерфейса обычно считается лучшей практикой - терминала вообще нет!

Обратите внимание, что при использовании &(не nohup) закрытие терминала по- прежнему завершает работу приложения, если вы не запустите его disownпозже .

РЕДАКТИРОВАТЬ: похоже, что использование nohupиногда оставляет небольшие помет в вашей домашней папке. То, что обычно регистрировалось в терминале, по-видимому, сохраняется в файл в ~ /.

~~

Простой способ запустить программу в фоновом режиме - program-name & disownвы попадете в терминал, который можно закрыть, не прерывая процесс.


4
Чтобы предотвратить уничтожение дочернего процесса после закрытия терминала, вы можете запустить свое приложение как nohup firefox&.
ccpizza

Круто! Я этого не знал (но после экспериментов терминал все еще «заблокирован»)!
WindowsEscapist

он не «заблокирован», он только «выглядит» заблокированным, если вы наберете команду enter, вы получите приглашение.
ccpizza

Ах, я не заметил этого раньше.
WindowsEscapist

program-name & disownэто хорошее решение
Доктор Генри

8

Вы можете запустить команду с & после.

Например:

Thunderbird &

Смотрите здесь для получения дополнительной информации.


Это работает только до тех пор, пока вы не закроете окно терминала, как только вы закроете окно, программа прекратит работу
kurdtpage

6

Вы можете использовать setsidдля запуска программы в новом сеансе с добавлением к, &>/dev/nullтак что вы не будете получать никаких сообщений журнала.

Так было бы как

setsid program-name &>/dev/null


Круто. Он должен поддерживать выполнение процесса, когда выход пользователя из системы и текущий сеанс закрыты.
Михаил Москалев

1

Используя screenкоманду, вы можете открыть несколько сеансов терминала, используя одно окно, и нажмите

apt-get install screen (On Debian based Systems)

yum install screen (On RedHat based Systems)

screen (начать новый экран)

[Your command]

Ctrl+A d покинуть экран ... и так далее

https://linuxize.com/post/how-to-use-linux-screen/


0

Вы можете запустить его в виртуальном терминале tmux(или, как screenя слышал, он больше не поддерживается)

# This ataches your terminal to a virtual terminal
tmux
run_your_command
# This detaches your virtual terminal (previous command can be running)
CTRL-b d
run_other_commands # on your terminal
# re-attach the virtual terminal to see the status of run_your_command
tmux a

tmux может сделать намного больше, например:

  • перенести виртуальный терминал на другой терминал
  • разделите виртуальный терминал на несколько терминалов (другие пользователи могут видеть, что вы делаете ;-))
  • разделить «экран», чтобы иметь несколько терминалов.
  • ...

https://www.hamvocke.com/blog/a-quick-and-easy-guide-to-tmux/

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.