Como encontrar o ID do processo (PID) de um programa do terminal em execução?

83

Estou executando um programa no terminal que não posso escapar com Ctrl - C e que eu quero matar. Como posso encontrar o seu PID?

    
por Jjed 25.08.2012 / 17:00

8 respostas

98

Abra outro terminal e execute ps ax | grep foo , em que foo é o nome do programa que não responde. Isso deve retornar uma linha de saída semelhante a esta:

$ ps ax | grep firefox
2222 ?        S      0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox
2231 ?        Sl   514:36 /usr/lib/firefox-3.6.9/firefox-bin
30290 pts/2    S+     0:00 grep --color=auto firefox

O primeiro campo de cada linha de saída é um número que representa o ID de Processo do programa correspondido por grep (você pode ignorar com segurança o último, que representa grep em si.

Para interromper o processo ofensivo, faça: kill pid em que pid é o ID do processo do programa. Você pode ter que usar seu julgamento sobre qual das correspondências precisa ser kill ed ou usar top . Usar kill por si só envia SIGTERM, que você deve tentar primeiro, pois permite que o programa seja limpo adequadamente após ele mesmo. Se o SIGTERM falhar, tente SIGHUP, que é um remédio mais strong: kill -HUP pid . Se tudo mais falhar, envie SIGKILL. Mas, você deve fazê-lo apenas como último recurso, porque o SIGKILL faz com que o kernel encerre o processo imediatamente, sem possibilidade de limpeza. Isso às vezes pode resultar em corrupção de dados ou outros problemas. Então, novamente, envie o SIGKILL como último recurso. Para fazer isso, faça kill -KILL pid ou kill -9 pid .

Se você estiver executando uma interface gráfica, é claro, você não terá que enganar com essa coisa louca de linha de comando para fazer o trabalho. Apenas abra o "System Monitor", navegue até a aba Processos, escolha o processo que você quer parar (Hm, poderia ser aquele usando 90% da CPU?) E clique com o botão direito nele. Como o processo já está parado, (esse é o problema, certo?), Escolha Finalizar processo ou Eliminar processo no menu resultante.

  

Crédito para koanhead

    
por Jjed 13.04.2017 / 14:24
29

Eu não acho que haja necessidade de comandos tão longos quando você pode realizar os mesmos comandos com pgrep, pkill, pidof etc ...

  • Para obter o pid de um programa em execução

pgrep:

   pgrep [options] pattern

DESCRIÇÃO:     O pgrep examina os processos atualmente em execução e lista os IDs do processo que correspondem aos critérios de seleção para stdout. Todos os critérios devem corresponder. Por exemplo,

  • Para localizar o processo chamado sshd, de propriedade do root.

    $ pgrep -u root sshd
    
  • Relacione os processos que pertencem ao daemon OR raiz.

    $ pgrep -u root,daemon
    

pidof:

DESCRIÇÃO :

O Pidof encontra os ids do processo (pids) dos programas nomeados. Imprime esses id's na saída padrão.

sintaxe:        pidof program_name

  • Para matar um programa por pid use pkill exemplo:

    pkill pid    
    pkill -f process_name    
    pkill -o process_name    
    pkill -n process_name    
    pkill -l process_name
    

    -f flag: pesquisa o process_name (consulte man pkill)
    -o flag: seleciona apenas o mais antigo dos processos correspondentes.
    -n flag: seleciona apenas o mais novo dos processos correspondentes.
    -l flag: Liste o nome do processo, bem como o ID do processo.

por Prabhat Kumar Singh 16.06.2014 / 11:07
14

A maneira mais fácil de saber o pid de um programa em execução é usar:

pidof <application name>

Por exemplo, se você iniciou o vim e quer saber o seu pid:

pidof vim

Lembre-se de que você precisará fornecer o nome exato do programa que foi iniciado.

Por exemplo, se você estiver executando o vi e executar pidof vim , não obterá resultados corretos.

Consulte a página de manual do pidof para mais informações.

    
por jobin 16.06.2014 / 11:28
12

Descobri que é interessante usar uma pesquisa sem distinção entre maiúsculas e minúsculas, adicionando o "-i" e usando "aux" em vez de "ax" para obter uma saída mais descritiva:

ps aux | grep -i firefox

Se você quiser matar todos os processos que você pode usar:

ps aux | grep -i firefox | awk {'print '} | xargs kill -9

Isso é uma matança strong. Solte o "-9" se você quiser uma morte suave.

    
por John Foley 24.12.2013 / 17:45
3

Se você quiser apenas o pid (útil para scripts automáticos, etc ...)

pgrep -f desired_program_name
    
por MikeL 10.01.2017 / 14:29
0

Você também pode abrir outro terminal (ou alternar para outro tty) e executar top , que é basicamente uma versão de texto do Monitor do Sistema. A primeira coluna lista o PID de cada processo em execução, que você pode eliminar pressionando K , inserindo o PID e, em seguida, inserindo um sinal numérico para enviar.

    
por Waldir Leoncio 16.06.2014 / 13:01
0

Você poderia fazer:

ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9

os dois primeiros canais obtêm informações do processo, depois tentamos obter a coluna PID usando o corte antigo e depois damos o PID resultante para matar.

    
por Arian Soltani 27.09.2016 / 23:09
0

Para aqueles que executam o Ubuntu 16.04 LTS, você deve usar ps ax e não apenas ps na linha de comando, senão você obterá os processos gerados a instância do terminal em particular em que você está. (geralmente apenas 'bash' [o shell em que você está] e 'ps' [o que você acabou de executar])

    
por cygnus_x1 10.09.2017 / 16:30