Os terminais não têm IDs de processo.
São processos que possuem IDs de processo, é claro. Os terminais têm IDs próprios e você os verá nos resultados de ferramentas como w
, who
e (na TTY
column) ps
. Mas estes não são IDs de processo.
A relação entre processos e terminais não é de 1: 1. Além disso, como grawity
apontou, um shell não é um terminal . Um terminal é um dispositivo. Um shell é um programa. O programa bash
é um shell, cuja entrada e saída (no modo interativo, pelo menos) são lidas e gravadas em um terminal dispositivo .
Terminais no computador pessoal Linuxes e Unices geralmente não são reais , físicos, dispositivos, conectados a uma porta serial de algum tipo. Pelo contrário, eles são terminais virtuais ou pseudo . Ambos são produtos de programas de emulador de terminal .
- No caso de terminais virtuais, esse programa é incorporado ao kernel do sistema operacional (embora tenha havido movimentos para alterar isso) e não possui um ID de processo porque não é um processo distinto em seu próprio certo.
- No caso de pseudo-terminais, há um processo que gerencia o lado "mestre" do dispositivo e exibe o conteúdo do terminal de alguma forma. Normalmente, é um programa GUI, como
xterm
,lxterminal
,konsole
,gnome-terminal
ourxvt
. (Poderia, alternativamente, ser os daemons SSH ou TELNET.) Eles têm IDs de processo. Mas é o emulador terminal que é o processo, não o dispositivo pseudo-terminal.
Por que você vê dois bash
processos: Você tem dois bash
processos em execução. É simples assim. Eles não estão necessariamente associados ao mesmo terminal, ou mesmo a qualquer dispositivo terminal. Novamente, a coluna TTY
na saída de ps
informará o que terminal de controle tem cada processo. (Os terminais não possuem IDs de processo, mas de certa forma os processos possuem IDs de terminal.)