Estou executando um programa no terminal do qual não posso escapar Ctrl- Ce que quero matar. Como posso encontrar seu PID?
Estou executando um programa no terminal do qual não posso escapar Ctrl- Ce que quero matar. Como posso encontrar seu PID?
Respostas:
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 isso:
$ 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 do processo do programa correspondente grep
(você pode ignorar com segurança o último, que se representa grep
.
Para interromper o processo incorreto, faça:
kill pid
where pid é o ID do processo do programa. Talvez você precise julgar qual das correspondências precisa ser kill
editada ou, em top
vez disso, use-a . O uso kill
por si só envia o SIGTERM, que você deve tentar primeiro, pois permite que o programa limpe adequadamente depois de si mesmo. Se SIGTERM falhar, tente SIGHUP, que é a medicina stonger: kill -HUP pid
. Se tudo mais falhar, envie SIGKILL. Porém, você deve fazê-lo apenas como último recurso, porque o SIGKILL faz com que o kernel finalize o processo imediatamente, sem possibilidade de limpeza. Às vezes, isso pode resultar em corrupção de dados ou outros problemas. Então, novamente, envie apenas SIGKILL como último recurso. Para fazer isso, faça kill -KILL pid
ou kill -9 pid
.
Se você está executando uma interface gráfica, é claro, não precisa se enganar com essas coisas malucas da linha de comando para fazer o trabalho. Basta abrir o "System Monitor", navegar até a guia Processos, escolher o processo que deseja interromper (Hm, poderia ser aquele que usa 90% da CPU?) E clicar com o botão direito do mouse. Como o processo já está parado, (esse é o problema, certo?), Escolha Finalizar processo ou Finalizar processo no menu resultante.
Crédito para koanhead
kill -9
é um mau conselho. Eu editei a resposta para corrigi-la.
ping
comando e sleep
. De acordo com unix.stackexchange.com/a/275826/72988 , não é possível no Ubuntu sem multiplexer
.
Eu não acho que haja necessidade de comandos tão longos quando você pode executar os mesmos comandos com pgrep, pkill, pidof etc ...
pgrep:
pgrep [options] pattern
DESCRIÇÃO: O pgrep examina os processos em execução no momento e lista os IDs do processo que correspondem aos critérios de seleção para o stdout. Todos os critérios devem corresponder. Por exemplo,
Para localizar o processo chamado sshd, de propriedade do root.
$ pgrep -u root sshd
Listar os processos pertencentes ao root OU daemon.
$ pgrep -u root,daemon
pidof:
DESCRIÇÃO :
Pidof localiza os IDs de 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 o exemplo pkill:
pkill pid
pkill -f process_name
pkill -o process_name
pkill -n process_name
pkill -l process_name
-f
flag: Pesquisa o flag process_name (consulte man pkill)
-o
: selecione apenas o processo mais antigo correspondente.
-n
flag: selecione apenas o mais novo dos processos correspondentes.
-l
flag: Liste o nome do processo e 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 conhecer 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 execute pidof vim
, não obterá resultados corretos.
Consulte a pidof
página do manual para mais informações.
pidof mysqld
retorna um PID. No entanto, se eu digitar pidof Mariadb
nada será retornado. É o mesmo PID para o MariaDB e o MySQL?
Eu achei bom 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ê gostaria de matar todos os processos, você pode usar:
ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9
Isso é uma matança forçada. Solte o "-9" se você quiser uma morte suave.
ps aux | grep -i firefox...
processo, porque contém o texto firefox
em seu comando!
grep -i firefo[x]
para corresponder apenas ao firefox
Para aqueles que executam o Ubuntu 16.04 LTS, você deve usar ps ax
e não apenasps
na linha de comando, caso contrário, você obterá os processos gerados a partir da instância do terminal em que você está. (Geralmente apenas 'bash' [o shell em que você está] ] e 'ps' [o que você acabou de executar])
ps -e
(mostra tudo) e ps -ejH
(mostra uma árvore de processo).
Você também pode abrir outro terminal (ou alternar para outro tty) e executar top
, que é basicamente uma versão em texto do System Monitor. 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.
Você poderia fazer:
ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9
os dois primeiros pipes obtêm informações do processo, depois tentamos obter a coluna PID usando o corte da velha escola e depois damos o PID resultante para matar.
kill -9
é a maior arma que você precisa para matar um processo. Você deve tentar um sinal mais gentil no início antes de recorrer à SIGKILL para dar ao processo a chance de limpar seus recursos.