Я начинаю использовать tmux
и нахожу интересную вещь,
В gnome-terminal
$ pstree -asp $
systemd,1 splash
└─systemd,14385 --user
└─gnome-terminal-,15157
└─bash,17525
└─pstree,17551 -asp 17525
Понятно, что ток pstree -asp $
работает под gnome-terminal
Однако при запуске tmux
$ pstree -asp $
systemd,1 splash
└─systemd,14385 --user
└─tmux: server,16469
└─bash,17699
└─pstree,17794 -asp 17699
Почему tmux не входит в gnome-terminal
?
Большая разница - это gnome-terminal
приложение GUI, окно. Это - своего рода интерфейс к оболочке, но они являются чрезвычайно отдельными. Когда приложение GUI выходит, сервер GUI (X11 и по-видимому Уэйленд также) очищает окна и закрывает их. gnome-terminal
будучи родителем оболочки, отправит SIGHUP для закрытия дочерних процессов, и это закроет сеанс оболочки. Аналогичная ситуация происходит с консолями TTY или ssh. В TTY Вы имеете agetty
процесс, который примет Ваши данные для входа в систему и затем запустит конкретную программу, обычно оболочка, хотя в определенных случаях он мог быть настроен для выполнения чего-то еще полностью.
Теперь, tmux
отличается - это - консольное приложение и не зависит от входа в систему (хотя Вы могли заставить его появиться после входа в систему tty). Скажите, что у Вас есть сервер в Нью-Йорке, но Вы находитесь в Калифорнии. Вы хотите запустить длительную команду, возможно, обновить и разъединиться от удаленного сеанса. То, что можно сделать, является запуском tmux
, запустите команду в оболочке tmux
открывается, и через Ctrl+b и отсоединение d от сессии. Команда останется работать в экземпляре оболочки, управляемом tmux
в отличие от этого, gnome-terminal
. На следующий день можно сделать
$ tmux ls
0: 1 windows (created Fri May 17 13:42:54 2019) [167x48]
найти рабочие сессии и соединиться назад с ним через
$ tmux attach
для новой сессии или через
$ tmux attach -t 0
присоединить к сессии, названной 0 как в моем примере. В целом tmux
сделал, чтобы клиент сервера приблизился, где Вы соединяетесь с конкретная сессия, обработанная серверным процессом, и та коммуникация продолжается через сокет домена Unix (по умолчанию в /tmp/tmux-<UID>
), пока система не была перезагружена.
Под капотом, обоими tmux
и gnome-terminal
использовать pts
устройство виртуального терминала (в отличие от этого, tty
который используется для последовательных консолей или виртуальной tty1 консоли, например). Они оба способны к запуску интерактивной оболочки и отдельных команд от /bin
или /usr/bin
, или что-то Вы сделанный на заказ. Все же их существенная цель отличается.
См. также