Иногда я хочу начать процесс и забыть об этом. Если я запускаю его из командной строки, вот так:
redshift
Я не могу закрыть терминал, иначе он убьет процесс. Могу ли я выполнить команду таким образом, чтобы я мог закрыть терминал, не прерывая процесс?
yourExecutable &
и выходы продолжают появляться на экране иCtrl+C
, кажется, ничего не останавливает, просто печатайте вслепуюdisown;
и нажимайте,Enter
даже если экран прокручивается с выходами, и вы не можете видеть, что ты печатаешь Процесс будет остановлен, и вы сможете закрыть терминал без его остановки.Ответы:
Один из следующих 2 должен работать:
или же
Ниже приведено немного больше информации о том, как это работает:
man nohup
help disown
Разница между nohup, disown и & (обязательно прочитайте также комментарии)
источник
redshift & disown
) работал для меня на Ubuntu 10.10. Кажется, все работает хорошо, помещая все это в одну строку. Есть ли причина, по которой я не должен этого делать?nohup redshift &
чтобы оно работало в фоновом режиме). И помещать второе на одной строке - это хорошо, хотя обычно вы отделяете;
(redshift &; disown
);
и&
являются разделителями команд и имеют одинаковый приоритет. Единственная разница - синхронное и асинхронное выполнение (соответственно). Нет необходимости использовать&;
в предпочтении просто&
(это работает, но это немного избыточно).redshift &!
немедленно откажется от красного смещения.Если ваша программа уже запущена, вы можете приостановить ее
Ctrl-Z
, переместить в фоновый режим,bg
а затемdisown
, например, так:источник
disown
не отключает стандартный вывод или стандартный вывод. Темnohup
не менее , как и>/dev/null
(отключить стандартный выход)2>/dev/null
(отключить стандартную ошибку). Это (disown
) отключает контроль работы.Хороший ответ уже опубликован @StevenD, но я думаю, что это могло бы прояснить это немного больше.
Причиной того, что процесс завершается при завершении терминала, является то, что запускаемый вами процесс является дочерним процессом терминала. Как только вы закроете терминал, это также уничтожит эти дочерние процессы. Вы можете увидеть дерево процессов
pstree
, например, при запускеkate &
в Konsole:Чтобы
kate
отделить процесс отkonsole
завершенияkonsole
, используйтеnohup
команду, например:После закрытия
konsole
,pstree
будет выглядеть следующим образом :и
kate
выживет. :)Альтернативой является использование
screen
/tmux
/byobu
, которая будет поддерживать работу оболочки независимо от терминала.источник
Вы можете запустить процесс, как это в терминале
setsid process
Это запустит программу в новом сеансе. Как объяснено http://hanoo.org/index.php?article=run-program-in-new-session-linux
источник
nohup.out
. 2) Он не остается в списке заданий вашей оболочки, поэтому он не загромождает выводjobs
.Хотя все предложения работают хорошо, я обнаружил, что моя альтернатива - использовать
screen
программу, которая настраивает виртуальный терминал на вашем экране.Вы можете начать с этого . Экран может быть установлен практически на все производные Linux и Unix. Нажатие + и (нижний регистр) начнется второй сеанс. Это позволит вам переключаться между начальным сеансом, нажимая +, и / или более новый сеанс, нажимая + и . Вы можете иметь до десяти сеансов в одном терминале. Я использовал, чтобы начать сеанс на работе, пойти домой, SSH в мою рабочую машину, а затем вызвать . Это соединит вас с этим удаленным сеансом.
screen -S session_name
CtrlACCtrlA0CtrlA1screen -d -R session_name
источник
screen -d -m command
запустит его на уже оторванном экране:~# screen -d -m top ~# screen -ls There is a screen on: 10803..Server-station (Detached) 1 Socket in /root/.screen. ~# screen -x
.... и вы внутри.Единственный способ сделать все это - закрыть команду stdin и выполнить команду background:
Тогда он не выйдет, когда вы выйдете из оболочки. Перенаправление stdout - хорошая дополнительная опция.
Недостатком является то, что вы не можете сделать это после факта.
источник
У меня есть скрипт для:
Запускать произвольные команды в фоновом режиме
Остановите их от убийства с окном терминала
Подавить их вывод
Обрабатывает статус выхода
Я использую это главным образом для
gedit
,evince
иinkscape
т.д., что у всех есть много раздражающего вывода терминала. Если команда завершается раньшеTIMEOUT
, состояние выхода nohup возвращается вместо нуля.Примеры...
источник
Я предпочитаю:
(Имя приложения &)
например:
linux@linux-desktop:~$ (chromium-browser &)
Обязательно используйте круглые скобки при вводе команды!
источник
nohup
предотвращает вывод tty, и я на самом деле просто хотел перенаправить вывод в файл, и это помешало, так что это лучшее решение для меня.Вы можете настроить процесс (PID) так, чтобы он не получал сигнал HUP после выхода из системы и закрытия сеанса терминала. Используйте следующую команду:
источник
Возможно, похоже на ответ, предложенный Аполинским , я использую вариант на
screen
. Ванильная команда такаяСеанс можно отключить Ctrl ACtrl Dи снова подключить в простом случае с
screen -r
. У меня есть это завернутый в сценарий под названием,session
который живет в моемPATH
готовы для удобного доступа:Это работает только тогда, когда вы заранее знаете, что хотите отключить программу. Он не предусматривает отключение уже запущенной программы.
источник
Как и в других ответах, опубликованных ранее, можно использовать запущенный процесс для ретроспективного использования «экрана» благодаря reptyr, а затем закрыть терминал. Шаги описаны в этом посте . Шаги, которые необходимо предпринять:
источник