My understanding is that a terminal window is created for a slave side, and a master side can have multiple slave sides.
Псевдотерминал всегда имеет только одну главную сторону и одну подчиненную сторону. Это просто двунаправленный канал с некоторыми дополнительными операциями [1].
Эмулятор терминала, который может открывать более одного окна/вкладки, также будет обрабатывать более одного мастера псевдотерминала.
Как я уже объяснял в другом ответе , эмулятор терминала может делать что-то свое, когда пользователь пытается закрыть окно или одну из его вкладок; Например,
xterm
не закроет главную сторону pty, а просто отправитSIGHUP
в группу процессов tty и только уничтожит окно (и выйдет ), когда процесс запущен в in вышел или больше не может использовать основную часть pty (, например. потому что все дескрипторы на его подчиненной стороне были закрыты ).[1]. В системе SystemV с STREAMS эти дополнительные операции являются модульными и должны быть «продвинуты» с помощью
ioctl(I_PUSH)
. В Linux и *BSD они встроены. Также поведение ptys не полностью стандартизировано; попытка чтения с ведомого без ведущего или наоборот -завершится ошибкой сEIO
в Linux, но возвратит 0 (EOF )во FreeBSD.
В служебном файле замените WantedBy=default.target
на WantedBy=multi-user.target
.
Как очень ясно объяснил telcoM :unix.stackexchange.com/a/506374/437095