Como encontrar processos ainda em execução em um terminal?


12

Quando tento fechar uma guia no Gnome Terminal, ele diz:

Fechar este terminal? Ainda existe um processo em execução neste terminal. Fechar o terminal irá matá-lo.

Como posso descobrir o que ainda está em execução? Observe que não há nada na saída de jobs. Obrigado.


1
Se você estiver no prompt do shell enquanto esta mensagem é mostrada, provavelmente este é um shell aninhado (não aquele diretamente iniciado pelo emulador de terminal). Talvez você começou a screen, tmux, script, ssh, mce virou os painéis off, ou apenas um outro shell por exemplo digitação bash, ou algo nesse sentido. Pressione Ctrl + D ou digite exitpara sair do seu shell, você verá onde termina.
Egmont

Obrigado. depois exit, a guia terminal do gnome não fecha.
Tim

1
Um segundo exitprovavelmente irá fechá-lo então. @egmont, você pode passar isso para uma resposta, por favor.
Videonauth

Respostas:


12
ps T

Seleciona todos os processos associados ao terminal.


Bom, embora possa ser um pouco enganador. Os processos gerados por nohupcomando são desconectados do terminal, portanto, não bloqueie seu fechamento. Mas eles ainda estão listados com este comando.
Sergiy Kolodyazhnyy 6/08/19

Ou apenas ps para esse assunto
user10089632

1

Você pode ter um pico nos processos que listam o PID do seu shell como pai. Como você pode ou não saber, podemos especificar o psformato

SHELLPID=$$ ; ps -e  -o cmd,pid,ppid | awk -v shell=$SHELLPID  '$NF~shell'   

Aqui, temos PID do shell de variável especial $$em SHELLPIDque, em seguida, pode ser usado por awk em subnível do tubo. Basicamente, estamos apenas listando processos no formulário NAME, PID, PID pai e filtrando apenas aqueles que possuem o PID apropriado na última coluna.


1

Se você iniciou algum processo no terminal (por exemplo, gedit), o ID do processo (PID) (do bash) e o ID do processo pai (PPID) (do gedit) para esses dois processos serão os mesmos. Isso pode ser visto na saída de

ps -ef

comando. Para torná-lo mais legível, vamos primeiro "canalizar" a saída para grepencontrar o PID de todos os processos "bash" em execução no momento e depois "canalizar" novamente para awk. Ele awkseleciona apenas os campos PID e nome do processo (campos 2 e 8) e os envia para a tela.

ps -ef | grep bash | awk '{print $2 ": " $8}'

O número na saída é PID. Você o usará para descobrir qual processo foi iniciado no terminal que possui esse PID. Observe que pode haver mais de uma linha de saída se você tiver mais de um terminal aberto. Agora, para encontrar os processos "filhos" (se houver) dessas sessões de terminal, podemos usar este comando:

ps -ef | awk '{if ($3 == EnterPID) print $2 ": " $8;}'

Você deve inserir o número do PID no lugar de EnterPID no último comando. Se houver mais de um PID para "bash", você deve tentar todos eles.

O último comando apenas procura a saída ps -efe pesquisa se o PID (que você encontrou no comando anterior) e o PPID são iguais para qualquer processo.

Mais informações:

homem ps

homem awk


-1

Você pode usar htop. No Ubuntu 16.04 (e superior), você pode instalá-lo apenas digitando sudo apt-get install htop.

Você também pode usar top.


E como você identificaria os processos no terminal atual usando htop?
muru 23/07/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.