4

Есть ли способ присоединить к определенному терминалу процесс, который был запущен из терминала с &? Например, я начал Kate с:

kate &

и теперь я хочу присоединить процесс к данному терминалу.

2 ответа2

8

Здесь есть две проблемы:

1) Смерть от HUP и избежание этого:

Если вы запустите программу в оболочке, а затем закроете эту оболочку, все дочерние процессы будут уничтожены. Это включает в себя программы, работающие в фоновом режиме. (Те, которые вы начинаете с символа & в конце команды, например kate & в вашем примере, но также и процессы, которые вы приостановили с помощью элемента управления z и затем bg).

Оба умрут, как только вы закроете раковину.* 1

Вы можете обойти это, disown от фоновой программы. Затем он продолжит работать, но вы больше не сможете вернуть его на передний план оболочки.

Вы можете использовать nohup (например, nohup kate &), чтобы сохранить вывод программы из файла. Но полное присоединение к оболочке также больше невозможно.


2) Терминальные эмуляторы.

Вы также можете запустить программу, которая эмулирует терминал самостоятельно и которая специально создана, чтобы вы могли подключиться к нему. screen и tmux - два примера этого.

Пример использования экрана:

  • Войдите или SSH для размещения.
  • screen (запускает экран. По умолчанию запускается новая оболочка).
  • kate (начинает Кейт).
  • Control A D (Отключение экрана, вы вернетесь к тому же приглашению, которое было при первом входе в систему.).
  • 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 .

7

fg выводит что-то из фона на передний план в текущем терминале.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .