paulo1205
(usa Ubuntu)
Enviado em 29/06/2016 - 15:09h
ctw6av escreveu:
O PID do terminal em aberto será sempre a variável especial $$ do terminal rodando, mas realmente como o colega acima escreveu não faz sentido (desde que não sei o intuito) abrir terminais para executar comandos o arquivo .sh já o faz.
Falso. “
$$” não indica o PID do terminal: essa variável do shell (se é que o processo em questão é um shell) contém o PID do próprio shell. Mesmo que esse shell execute dentro de um terminal, o shell é distinto do terminal que o controla.
Normalmente, um terminal tem
um ou mais processos que são por ele
controlados, mas não necessariamente um processo que responda pelo funcionamento do terminal em si. Por exemplo: o console em modo texto ou terminais seriais são controlados diretamente pelo kernel, e não possuem PIDs próprios para funcionar(*).
No caso de terminais de rede e emuladores de terminal (incluindo
xterm,
Gnome-Terminal,
Konsole,
sshd,
telnetd,
screen,
byobu,
splitvt e outros), existe um processo que implementa visualmente (ou ocultamente) o funcionamento do terminal virtual. Esse processo
não é parte do grupo de processos controlados pelo terminal. Além disso, mesmo que um processo identifique que está executando num terminal virtual emulado, é relativamente difícil saber o PID do processo que implementa a emulação (isto é: não existe uma chamada direta que funcione em qualquer situação, e as heurísticas para inferir que processo o faz podem variar dependendo do programa e até mesmo ao longo do tempo). Também não existe necessariamente uma correspondência biunívoca entre um terminal virtual e um PID que implemente a interface com o usuário: o mesmo processo pode controlar vários terminais diferentes, e (ao menos teoricamente, embora eu nunca tenha visto na prática e ache que seria uma aventura caótica) vários processos pode deter cópias do descritor que controla o terminal virtual.
--------------
(*) Pode até ser que o kernel tenha
threads internas associadas a cada terminal, mas tais
threads não são processos controláveis diretamente pelo usuário -- nem mesmo o pelo
root.