Установка CentOS 7: проблемы с разделами и поврежденный интерфейс

Стандартный вывод процесса — это файловый дескриптор, который доступен как путь где-то в системе UNIX. Нам нужно будет найти этот путь, чтобы установить его атрибуты tty. Поскольку это curses, этот файловый дескриптор будет указывать на терминальное устройство (pts/tty).

Первый шаг — найти pid запущенного процесса. Используя pidof, pgrep или ps aux:

ps aux | grep '<program arguments>'

Получив pid запущенного процесса, вы можете найти путь к подключенному терминальному устройству. к этому процессу, используя proc (если доступно) или lsof.


Получите путь tty/pts, используя lsof:

 device="$(lsof -X -p <pid> | grep -o '/dev/.*' | grep -v urandom | uniq)"

Это даст вам что-то вроде:

 device=/dev/pts/4

Здесь мы используем опцию -X для игнорирования TCP-соединений для остановки lsof от зависания и -p, чтобы сообщить lsof, что ему присвоен pid.


Если доступен /proc (linux), то вы можете найти символическую ссылку под его pid:

device=/proc/<pid>/fd/1

Теперь, когда мы знаем устройство вывода, мы можем установить его атрибуты tty:

stty onlcr echo icrnl icanon -F $device

stty по умолчанию устанавливает атрибуты tty стандартного ввода текущего терминала. Вы можете использовать -F, чтобы указать путь.

Теперь по какой-то причине мне пришлось установить эти атрибуты несколько раз, чтобы они закрепились:

while true; do stty onlcr echo icrnl icanon -F /proc/<pid>/fd/1; done

Примечание. После написания этого я понял, что ps может отображать прикрепленный TTY рядом с процессом: ps ao args,tty.

1
13.04.2017, 15:22
0 ответов

Теги

Похожие вопросы