Есть ли способ присоединить к определенному терминалу процесс, который был запущен из терминала с &? Например, я начал Kate с:
kate &
и теперь я хочу присоединить процесс к данному терминалу.
Здесь есть две проблемы:
1) Смерть от HUP и избежание этого:
Если вы запустите программу в оболочке, а затем закроете эту оболочку, все дочерние процессы будут уничтожены. Это включает в себя программы, работающие в фоновом режиме. (Те, которые вы начинаете с символа & в конце команды, например kate &
в вашем примере, но также и процессы, которые вы приостановили с помощью элемента управления z и затем bg
).
Оба умрут, как только вы закроете раковину.* 1
Вы можете обойти это, disown
от фоновой программы. Затем он продолжит работать, но вы больше не сможете вернуть его на передний план оболочки.
Вы можете использовать nohup (например, nohup kate &
), чтобы сохранить вывод программы из файла. Но полное присоединение к оболочке также больше невозможно.
2) Терминальные эмуляторы.
Вы также можете запустить программу, которая эмулирует терминал самостоятельно и которая специально создана, чтобы вы могли подключиться к нему. screen
и tmux
- два примера этого.
Пример использования экрана:
screen
(запускает экран. По умолчанию запускается новая оболочка).kate
(начинает Кейт).logout
Пройдите к другому компьютеру или вернитесь через несколько часов. (или оба :))- залогиниться или войти в ssh.
- screen -r
(Снова подключите экран. Теперь вы вернулись к оболочке, в которой вы запускаете kate.
Полезные команды для экрана:
экран -d
Отсоедините экран от внешней программы экрана.
Используйте Control A D для отсоединения от внутреннего экрана.
screen -r Повторно подключиться к экрану (например, из другого места)
screen -dr
Если есть прикрепленный экран, то сначала отсоедините его. Тогда приложите это локально.
Полезно, что вы забыли отключить его в офисе и войти в систему из дома;)
экран -x
Присоединить к рабочему экрану, не закрывая другой сеанс. Полезно для общей отладки, сеанса помощи и т.д. И т.д.
* 1: Edit: Когда я ответил на это, я предположил, что все оболочки всегда будут отправлять sigHUP всем своим детям. Однако это вариант, и в зависимости от оболочек он может быть настраиваемым. В некоторых случаях это даже больше не по умолчанию.
Пример 1: В bash вы можете настроить эту опцию с помощью команды buildin. (shopt -s huponexit
).
Пример 2: с помощью zsh вы хотите setopt
HUP
.
fg
выводит что-то из фона на передний план в текущем терминале.