6.6.1. Пример работы с псевдотерминалом

6.6.1. Пример работы с псевдотерминалом

Узнать, какое терминальное устройство закреплено за процессом, можно с помощью команды ps. Укажите в опции -о столбец tty, чтобы он был включен в отчет команды. Например, следующая команда отображает идентификаторы процессов, терминалы, на которых они работают, и командные строки их вызова:

% ps -o pid,tty,cmd

  PID TTY   CMD

28832 pts/4 bash

29287 pts/4 ps -o pid,tty,cmd

В данном случае терминальному окну соответствует псевдотерминал 4.

У каждого псевдотерминала есть запись в каталоге /dev/pts:

% ls -l /dev/pts/4

crw--w---- 1 samuel tty 136, 4 Mar 8 02:56 /dev/pts/4

Обратите внимание на то, что псевдотерминал — это символьное устройство, а его владельцем является владелец процесса, для которого был создан псевдотерминал.

С псевдотерминалом можно обмениваться данными. При чтении перехватываются символы, вводимые с клавиатуры, а при записи данные отображаются в окне терминала.

Попробуйте открыть новое терминальное окно и определить номер псевдотерминала, выполнив команду ps -o pid,tty,cmd. Теперь откройте другое окно и направьте какие-то данные на псевдотерминал. Например, если его номер 7, введите такую команду:

% echo "Hello, other window!" > /dev/pts/7

Заданная строка отобразится в первом окне. Когда терминальное окно будет закрыто, запись 7 исчезнет из каталога /dev/pts.

Если ввести команду ps в терминальном окне, работающем в текстовом режиме, окажется, что ему соответствует обычное терминальное устройство, а не псевдотерминал:

% ps -о pid,tty,cmd

  PID TTY  CMD

29325 tty1 -bash

29353 tty1 ps -o pid,tty,cmd