Un pseudo-terminal est une paire de périphériques de caractères virtuels
qui fournit un canal de communication bidirectionnel.
Une extrémité du canal est appelée le
maître ;
l'autre extrémité est appelée
l'esclave.
L'extrémité esclave du pseudo-terminal fournit une interface
qui se comporte exactement comme un terminal classique.
Un processus qui s'attend à être connecté à un terminal peut ouvrir
l'extrémité esclave d'un pseudo-terminal et peut être piloté
par un programme qui aura ouvert l'extrémité maître.
Tout ce qui est écrit sur l'extrémité maître est fourni au processus sur
l'extrémité esclave comme si cela avait été entré sur un terminal.
Par exemple, l'écriture du caractère d'interruption (généralement Ctrl-C)
sur le périphérique maître engendrera un signal d'interruption
(SIGINT)
pour le groupe de processus d'avant-plan qui est connecté à l'esclave.
Réciproquement, tout ce qui est écrit sur l'extrémité esclave du
pseudo-terminal sera lu par le processus qui est connecté sur l'extrémité
maître.
Les pseudo-terminaux sont utilisés par des applications telles que les
services de connexion réseau
(ssh(1), rlogin(1), telnet(1)),
les émulateurs de terminaux,
script(1),
screen(1),
et
expect(1).
Historiquement, deux API pseudo-terminaux ont été développées : BSD et
System V. SUSv1 a normalisé une API pseudo-terminal basée sur l'API
System V, et cette API devrait être utilisée dans les nouveaux programmes
qui utilisent les pseudo-terminaux.
Linux fournit les pseudo-terminaux de style BSD et de style System V
(normalisé).
Les terminaux de style System V sont plus communément appelés,
sous Linux, pseudo-terminaux Unix 98.
Depuis le noyau 2.6.4, les pseudo-terminaux de style BSD sont considérés
comme dépréciés (ils peuvent être désactivés lors de la configuration du
noyau) ; les pseudo-terminaux Unix 98 devraient être utilisés dans les
nouvelles applications.