Я использую один терминал Bash в Linux Mint. Я хотел увидеть идентификаторы процесса запуска терминала.

Итак, я попробовал две вещи:

ps -C 'bash'

ls -l /proc/*/exe | grep bash

И то, и другое дает два идентификатора процесса. Может ли кто-нибудь объяснить причину этих двух идентификаторов процесса только для одного терминала? как определить реальный идентификатор процесса терминала между двумя?

Спасибо

1 ответ1

2

Терминалы не имеют идентификаторов процессов.

Конечно, это процессы, которые имеют идентификаторы процессов. Терминалы имеют свои собственные идентификаторы, и вы увидите их в выходных данных инструментов, таких как w , who и (в столбце TTY ) ps . Но это не идентификаторы процессов.

Соотношение между процессами и терминалами не 1:1. Более того, как grawity , оболочка не является терминалом. Терминал - это устройство. Оболочка - это программа. Программа bash представляет собой оболочку, чей ввод и вывод (по крайней мере, в интерактивном режиме) считываются и записываются на оконечное устройство.

Терминалы на персональных компьютерах Linux и Unices, как правило, не являются реальными физическими устройствами, подключенными к какому-либо последовательному порту. Скорее, это либо виртуальные терминалы, либо псевдо терминалы. Оба являются продуктами программ эмулятора терминала .

  • В случае виртуальных терминалов эта программа встроена в ядро операционной системы (хотя уже были предприняты шаги, чтобы изменить это), и у нее нет идентификатора процесса, потому что это не отдельный процесс сам по себе.
  • В случае псевдотерминалов есть процесс, который управляет "ведущей" стороной устройства и отображает содержимое терминала некоторым образом. Обычно это программа с графическим интерфейсом, такая как xterm , lxterminal , konsole , gnome-terminal или rxvt . (В качестве альтернативы это могут быть демоны SSH или TELNET.) У них есть идентификаторы процессов. Но процесс - это эмулятор терминала, а не псевдотерминальное устройство.

Что касается того, почему вы видите два процесса bash : у вас запущены два процесса bash . Это так просто. Они не обязательно связаны с одним и тем же терминальным устройством или даже с любым терминальным устройством. Опять же, столбец TTY в выводе ps скажет вам, какой управляющий терминал есть у каждого процесса. (Терминалы не имеют идентификаторов процессов, но в некотором смысле процессы имеют идентификаторы терминалов.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .