script
командой unix, которая записывает ввод пользователя для его последующего воспроизведения.В некоторых операционных системах , включая Unix-подобные системы, псевдотерминал , псевдотерминал или PTY — это пара конечных точек (файлов) псевдоустройств , которые устанавливают асинхронный двунаправленный канал связи ( IPC ) (с двумя портами) между двумя или более процессами. [1] [2] [3]
Одно псевдоустройство в паре, главное , предоставляет средства, с помощью которых эмулятор терминала или сервер удаленного входа (например, сервер Telnet , rlogin или Secure Shell ) [3] управляет процессом подчиненного устройства. Другое псевдоустройство, ведомое , эмулирует аппаратное устройство последовательного порта [1] и используется терминально-ориентированными программами, такими как оболочки (например, bash ), в качестве процессов для чтения/записи данных обратно из/в главную конечную точку. [1] PTY аналогичны двунаправленным каналам. [3] : 1388
Devpts — это виртуальная файловая система ядра Linux , содержащая псевдотерминальные устройства.
Реализация Linux основана на терминалах в стиле System V (обычно называемых псевдотерминалами UNIX 98) [4] и предоставляет POSIX и API единой спецификации Unix в форме функции posix_openpt() с 1998 года . [5]
Псевдотерминалы присутствовали в мониторе разделения времени DEC PDP-6 по крайней мере еще в 1967 году и использовались для реализации пакетной обработки. Они описаны в документации последующего TOPS-10 на PDP-10 . [6] Другие операционные системы DEC также имели PTY, включая RSTS/E для PDP-11 , как и сторонняя операционная система TENEX для PDP-10.
Реализации псевдотерминалов Unix восходят к модификациям, которые RAND и BBN внесли в 6-е издание в конце 1970-х годов для поддержки удаленного доступа по сети. [7]
Современные псевдотерминалы Unix возникли в 1983 году во время разработки восьмой редакции Unix и были основаны на аналогичной функции TENEX. [8] Они были частью версии BSD 4.2 с довольно громоздким openpty()
интерфейсом, определенным для использования. [9]
System V от AT&T включила поддержку псевдотерминалов в качестве драйвера в свою модель устройства STREAMS , а также мультиплексор псевдотерминалов ( /dev/ptmx ). Позже это превратилось в стиль PTY Unix98.
Интерфейс программирования Linux 2010 года содержит целую главу (глава 64 «Псевдотерминалы», стр. 1375–1399), объясняющую псевдотерминалы. Затем есть еще одна, глава 62 «Терминалы», посвященная терминалам.
В 2018 году консоль Windows была расширена за счет интерфейса PTY под названием ConPTY. [10]
Роль процесса эмулятора терминала заключается в следующем:
Процесс эмулятора терминала также должен обрабатывать команды управления терминалом, например, для изменения размера экрана. Широко используемые программы-эмуляторы терминала включают xterm , GNOME Terminal , Konsole и Terminal .
Серверы удаленного входа, такие как серверы Secure Shell и Telnet , играют ту же роль, но взаимодействуют с удаленным пользователем, а не с локальным.
Также рассмотрите такие программы, как ожидаемые .
Screen и Tmux используются для добавления контекста сеанса к псевдотерминалу, что делает решение гораздо более надежным и универсальным. Например, каждый из них обеспечивает постоянство терминала, позволяя пользователю отключиться от одного компьютера, а затем подключиться позже к другому компьютеру.
В системе BSD PTY файл подчиненного устройства, который обычно имеет имя вида /dev/tty[p-za-e][0-9a-f]
, поддерживает все системные вызовы , применимые к устройствам текстовых терминалов. Таким образом, он поддерживает сеансы входа в систему . Главный файл устройства, который обычно имеет имя вида /dev/pty[p-za-e][0-9a-f]
, является конечной точкой для связи с эмулятором терминала. При такой [p-za-e]
схеме именования может быть не более 256 пар tty. Кроме того, поиск первого свободного мастера pty может оказаться затруднительным , если не будет принята схема блокировки. По этой причине последние операционные системы BSD, такие как FreeBSD , реализуют PTY Unix98. [11]
BSD PTY устарели благодаря Unix98 ptys, чья система именования не ограничивает количество псевдотерминалов и доступ к которым происходит без опасности возникновения условий гонки. /dev/ptmx
это «главный мультиплексор псевдотерминала». Его открытие возвращает файловый дескриптор главного узла и вызывает создание связанного с ним подчиненного узла. [12]/dev/pts/N