$ ps -ef | head -n 1 && ps -ef | grep calc
UID PID PPID C STIME TTY TIME CMD
user1 524014 5382 0 10:21 ? 00:00:01 gnome-calculator
user1 532125 510665 0 10:36 pts/4 00:00:00 grep calc
Eu pensei que apenas os daemons teriam ?
como TTY, mas obviamente o Gnome Calculator não é um daemon. Eu sei que está rodando no TTY2, que é o TTY usado pela minha sessão do Gnome. Então, por que o ps
resultado é exibido ?
na coluna TTY?
[EDITAR]
Eu tenho a ideia de que o Gnome Calculator não está diretamente ligado a um TTY, porque foi lançado através de um shell gráfico (Gnome Shell). Eu pensei que, subindo a árvore de processos, eu obteria um processo anexado ao TTY2, mas esse nunca é o caso:
$ ps -f | head -n 1 && ps -ef | grep calc
UID PID PPID C STIME TTY TIME CMD
user1 524014 5382 0 10:21 ? 00:00:01 gnome-calculator
user1 578611 552619 0 11:58 pts/5 00:00:00 grep calc
$ ps -f -p 5382
UID PID PPID C STIME TTY TIME CMD
user1 5382 5131 4 juin10 ? 00:42:26 /usr/bin/gnome-shell
$ ps -f -p 5131
UID PID PPID C STIME TTY TIME CMD
user1 5131 1 0 juin10 ? 00:00:00 /lib/systemd/systemd --user
$ echo $DISPLAY
:1
Nenhum processo na cadeia está anexado ao TTY2. Mas obviamente o Gnome Calculator é exibido atualmente no TTY2. Existe um comando para descobrir em qual TTY um determinado processo é exibido no momento? (ou talvez em qual $DISPLAY
)?
ps exibirá um ponto de interrogação para qualquer thread não imediatamente anexado a um tty. ( um terminal a partir do qual o processo pode ser controlado )
Esse é, obviamente, o caso de threads de kernel e diversos outros daemons.
Mas este também é necessariamente o caso dos clientes X.
Você iniciou o gnome-calculator diretamente de um tty padrão? Claro que não ! você encontraria um tty sob o qual digitar Ctrl-C simplesmente o mataria? De novo não !
Você certamente o lançou a partir de sua interface gráfica, ou seja, logicamente de algum cliente X. => Sem tty anexado.
No entanto, se você estiver iniciando seu servidor X a partir de algum tty usando startx, você notará que o próprio servidor X está de fato anexado a esse tty.
EDITAR os seguintes comentários:
Não posso dizer para você, mas no que me diz respeito, olhando para:
meu ambiente de trabalho (KDE-Plasma) é iniciado pelo … daemon dbus…. Eu suspeito que você obtenha algo semelhante com o gnome. Portanto... novamente... nenhum terminal de controle como tal.
Há duas partes para esta pergunta.
A primeira, por que ps mostra "?" é razoavelmente simples. A biblioteca procps examina o 7º campo no arquivo de estatísticas do processo e tenta analisá-lo em um nome TTY.
Veja o zero após 2325 e -1? Esse é o ID do dispositivo TTY que o kernel está basicamente dizendo "não sei" ou "não aplicável".
Inicie-o na linha de comando no gnome-terminal e você obtém um TTY porque agora ele possui um terminal de controle.
O 34818 é o ID do dispositivo, com algum mascaramento e deslocamento de bits estranhos , você obtém o ID principal de 136 e o menor de 2, que são os IDs de /dev/pts/2
Em segundo lugar, a razão pela qual a primeira calculadora não tem um ID de dispositivo TTY é baseada em como o X funciona porque o computador em que sua tela estava pode ser diferente do computador em que o programa da calculadora estava executando.
Portanto, enquanto seu servidor X é executado em TTY2, seu programa de calculadora não é executado a partir desse TTY. Se você procurar por seu processo de sessão (provavelmente gnome-session), descobrirá que está sendo executado no tty2.