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

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

Abra outro terminal e execute ps ax | grep foo onde foo é o nome do programa que não responde. Isso deve retornar uma linha de saída que se parece com isto:

$ ps ax | grep firefox2222 ?        S      0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox2231 ?        Sl   514:36 /usr/lib/firefox-3.6.9/firefox-bin30290 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 do processo do programa correspondido por grep (você pode ignorar com segurança o último, que representa grep si.

Para interromper o processo ofensivo, Faça:kill pid onde pid é o ID do processo do programa. Você pode ter que usar seu julgamento sobre qual das correspondências precisa ser killed, ou você poderia usar top Sim. Mear kill por si só envia SIGTERM, que você deve tentar primeiro, pois permite que o programa limpe corretamente depois de si mesmo. Se SIGTERM falhar, tente SIGHUP, que é um medicamento mais forte: kill -HUP pid. Se tudo mais falhar, envie SIGKILL. Mas, você só deve fazê-lo como último recurso, porque SIGKILL faz com que o kernel termine o processo imediatamente, sem possibilidade de limpeza. Isso às vezes pode resultar em corrupção de dados ou outros problemas. Então, novamente, apenas envie 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 tem que enganar com este material de linha de comando louco para começar o trabalho feito. Basta abrir o "Monitor Do Sistema", navegar até a guia Processos, escolher o processo que deseja interromper (Hm, poderia ser aquele que usa 90% da CPU?) e clique com o botão direito. Como o processo já está parado, (esse é o problema, certo?) escolha Finalizar processo ou encerrar processo no menu resultante.

Crédito para koanhead

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

DESCRICAO : pgrep olha através dos processos atualmente em execução e lista os IDs de processo que correspondem aos critérios de seleção para stdout. Todos os critérios devem corresponder. Por exemplo,

  • Para encontrar o processo chamado sshd de propriedade da raiz.

    $ pgrep -u root sshd
  • Liste os processos pertencentes à raiz ou ao daemon.

    $ pgrep -u root,daemon

pidof:

DESCRICAO:

O Pidof encontra os IDs do processo (pids) dos programas nomeados. Ele imprime esses IDs na saída padrão.

sintaxe: pidof program_name

  • Para matar um programa por PID use pkillexample:

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

    -f sinalizador: pesquisa o nome do processo (consulte Man pkill)
    -o sinalizador: selecione apenas o mais antigo dos processos correspondentes.
    -n sinalizador: selecione apenas o mais novo dos processos correspondentes.
    -l sinalizador: liste o nome do processo, bem como o ID do processo.

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

pidof <application name>

Por exemplo, se você iniciou o vim e deseja saber 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 vi e executar pidof vim você não obterá resultados corretos.

Referir pidofpágina do manual para mais informações.

Descobri que é bom usar uma pesquisa que não diferencia maiúsculas de 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ê gostaria de matar todos os processos que você pode usar:

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

Isso é uma matança forçada. Largue o " -9 " se quiser uma morte suave.

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

pgrep -f desired_program_name

Para aqueles que executam o Ubuntu 16.04 LTS, você dever usar ps ax e não apenas ps na linha de comando, caso contrário, você obterá os processos gerados a partir da instância de terminal específica em que está. (geralmente apenas ' bash '[ o shell em que você está] e ' ps ' [o que você acabou de executar])

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

Você poderia fazer:

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

os dois primeiros tubos obtêm informações do processo, em seguida, tentamos obter a coluna PID usando o corte da velha escola e, em seguida, damos o PID resultante para matar.

top

ou

screen -list|ls

listar todos os pid com o processo correspondente

kill -[pid]

Este é um ramo de O Que devo fazer quando o Ubuntu congela? como uma referência para evitar que os detalhes nessa questão se tornem muito técnicos.

Existe um comando * pidof*.