Forçar o encerramento de processos com comportamento incorreto usando esses comandos do Linux
Para explicar o significado de um 'Processo' nas palavras mais simples, é que ele é uma instância em execução de qualquer aplicativo ou programa em seu sistema. Você pode estar executando vários aplicativos simultaneamente, como navegar, ouvir música em seu terminal, etc. Existem muitos processos em segundo plano associados a esses aplicativos que são executados pelo usuário.
Cada aplicativo ou programa executado em seu sistema cria vários processos associados a seu único aplicativo. Às vezes, isso pode ser um problema e se livrar desses processos é a única opção que você tem.
‘Matar’ um processo é uma opção útil que o Linux oferece para interromper os processos em andamento, seja um processo em primeiro ou em segundo plano. Neste artigo, revisaremos os comandos como matar
, pkill
e Mate todos
para forçar o encerramento de qualquer processo em um sistema.
Por que matar um processo?
Compreender o conceito de eliminar um processo é importante antes de prosseguir neste tutorial. Matar pode parecer uma forma muito brutal de expressar o conceito, mas o que significa figurativamente é abortar um processo à força.
Agora, por que abortar ou encerrar um processo em andamento? Quando vários processos estão sendo executados em segundo plano, todos ou alguns deles podem funcionar incorretamente e fazer com que o sistema funcione incorretamente. Isso atrasa suas tarefas em andamento, pois o processo com defeito pode congelar o sistema por um tempo.
Às vezes, encerrar todos os processos com comportamento inadequado parece ser a única opção para restaurar a normalidade em seu sistema. Linux permite que você mate um processo usando o pid
ou o nome do processo.
Usando o pgrep
comando
A maioria dos usuários do Linux está familiarizada com o grep
comando. O pgrep
comando pode ser usado em linhas semelhantes do grep
.
pgrep
comando quando usado, exibe o pid
do processo em execução conforme especificado no comando. Este comando será muito útil ao usar o pkill
comando.
Sintaxe geral:
pgrep [opções] [padrão]
Opções importantes disponíveis com o pgrep
comando
Opção | Descrição |
-você | listar ID de processo pertencente a um usuário específico |
-c | contar o número de processos correspondentes |
-EU | liste apenas nomes de processos |
-uma | lista o caminho completo do nome do processo |
Vamos demonstrar o uso de pgrep
comando usando um exemplo.
pgrep -u gaurav gnome
Aqui, desejamos ver o pids
do gnome de processo que pertence ao usuário ‘gaurav’. Opção -você
permite que você liste o pids
dos processos pertencentes a um usuário específico. Nesse caso, o usuário gaurav.
Saída:
gaurav @ ubuntu: ~ $ pgrep -u gaurav gnome 1752 1755 1909 1922 2021 2576 4279 gaurav @ ubuntu: ~ $
À medida que avançamos com este tutorial, pgrep
O comando nos ajudará a confirmar se o processo foi eliminado ou ainda está em execução.
Vamos agora passar para o pkill
comando e sua execução.
Usando pkill
comando
Você pode usar o pkill
comando no Linux para encerrar o processo usando o nome do processo. Mesmo que você não saiba o pid
de algum processo, mesmo assim você pode matar esse processo específico usando o pkill
comando.
Os processos podem ser especificados com seu nome completo ou o nome parcial ao usar o pkill
comando. Mesmo se você inserir o nome parcial do processo, o pkill
comando irá corresponder a todos os processos em execução com o nome correspondente que você inseriu no comando.
Sintaxe:
pkill [opções] [process_name_pattern]
Exemplo:
Vamos mostrar os processos em execução usando o principal
comando. Você também pode usar o ps
comando para listar os processos.
principal
topo - 14:24:02 até 3:12, 1 usuário, média de carga: 0,29, 0,48, 0,58 Tarefas: 221 no total, 1 em execução, 172 dormindo, 0 parado, 1 zumbi% CPU (s): 5,6 us, 1,0 sy , 0,0 ni, 92,9 id, 0,4 wa, 0,0 hi, 0,1 si, 0,0 st KiB Mem: 3928240 total, 610456 livre, 2233152 usado, 1084632 buff / cache KiB Swap: 4083708 total, 3378884 livre, 704824 usado. 1187268 disponível Mem PID USUÁRIO PR NI VIRT RES SHR S% CPU% MEM TIME + COMANDO 4077 gaurav 20 0 3312128 673480 118360 S 19,6 17,1 15: 13,23 Web Content 3712 gaurav 20 0 3953008 453544 116476 S 4,0 11,5 9: 28,39 MainThread 2010 gaurav 20 0 4084232 111096 45024 S 1,7 2,8 3: 14,85 gnome-shell 1197 root 20 0 1039612 33704 22988 S 1,0 0,9 3: 04,42 Xorg 1426 couchdb 20 0 3772396 16908 2520 S 0,7 0,4 1: 50,83 beam.smp 3288 gaurav 20 0 722480 25048 18272 S 0,7 0,6 0: 06,84 gnome-terminal- 3915 gaurav 20 0 2804900 231524 111228 S 0,7 5,9 0: 54,42 Conteúdo da web 4146 gaurav 20 0 3017924 245304 120604 S 0,7 6,2 2: 01,21 Conteúdo da web 4417 gaurav 20 0 2964208 234396 119160 S 0,70 6,0 0 : 59,90 Conteúdo da web 4860 gaurav 20 0 3066800 372920 132544 S 0,7 9,5 0: 48,20 Conteúdo da web 16007 gaurav 20 0 41944 3780 3116 R 0,7 0,1 0: 00,28 topo
Usando principal
comando irá exibir vários processos em seu terminal. Vamos tentar exibir o processo com um nome específico. Vamos usar o grep
comando para exibir um processo cujo nome corresponde à string ‘mongo’.
topo | grep -i mongo
Observação: Aqui, usei a opção -i para tornar a pesquisa sem distinção entre maiúsculas e minúsculas.
A saída deste comando exibirá os processos correspondentes ao nome ‘mongo’
1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,22 mongod 1158 mongodb 20 0 288564 4848 1320 S 1,0 0,1 1: 03,25 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,27 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,29 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,31 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,33 mongod 1158 mongodb 20 0 288564 4848 1320 S 1,0 1: 03,36 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,33 mongod 1158 mongodb 20 0 288564 4848 1320 S 1,0 1: 03,36 mongod 1158 mongod 20 0 288564 4848 1320 S 0,7 0,1 1: 03,38 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,40 mongod 1158 mongodb 20 0 288564 4848 1320 S 1,0 0,1 1: 03,43 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 1: 03,45 mongod 1158 mongodb 20 0 288564 4848 1320 S 1,0 0,1 1: 03,48 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,3 0,1 1: 03,49 mongod 1158 mongodb 20 0 288564 4848 1320 S 1,0 0,1 1: 03,52 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,54 mongod 1158 mongodb 20 0 288564 4848 1320 S 1,0 0,1 1: 03,57 mongod
Agora, vamos usar o pkill
comando para matar o processo denominado ‘mongo’.
pkill mongo
Este comando irá agora matar o processo mongo. Podemos confirmar se o processo foi forçado a encerrar usando o pgrep
comando que exibe o pid
do processo em execução de acordo com os critérios especificados pelo usuário.
gaurav @ ubuntu: ~ $ pgrep mongo gaurav @ ubuntu: ~ $
Este comando não retornará nenhum valor. Isso confirma que o processo ‘mongo’ agora é eliminado usando o pkill
comando.
Opções frequentemente usadas com pkill
comando
Ao usar o pkill
precisaremos das opções mencionadas para o uso adequado e sem esforço do pkill
comando.
Opções | Descrição |
-f | corresponde a argumentos completos, incluindo espaços, aspas, caracteres especiais |
-você | para informar o processo pkill para coincidir com o processo que está sendo executado pelo usuário especificado |
-1 | recarrega o processo |
-9 | mata o processo |
-15 | aborta graciosamente um processo |
Vamos ver mais um exemplo de pkill
comando usando o -f
opção.
Existem dois comandos em execução no terminal, conforme mostrado abaixo.
ping bbc.com ping youtube.com
Ambos os processos são iniciados pelo ping
comando. Agora, suponha que desejamos encerrar apenas um processo “ping youtube.com”, então temos que usar o -f
opção com o pkill
comando que mata um processo com um nome específico, incluindo os espaços e aspas do nome do processo.
Comando:
gaurav @ ubuntu: ~ $ pkill -f "ping youtube.com" gaurav @ ubuntu: ~ $
Resultado:
gaurav @ ubuntu: ~ $ ping youtube.com PING youtube.com (142.250.67.206) 56 (84) bytes de dados. 64 bytes de bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq = 1 ttl = 117 tempo = 30,9 ms 64 bytes de bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq = 2 ttl = 117 tempo = 121 ms 64 bytes de bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq = 206 ttl = 117 tempo = 86,5 ms 64 bytes de bom12s08-in-f14.1e100.net (142.250.67.206 ): icmp_seq = 207 ttl = 117 tempo = 105 ms Terminado gaurav @ ubuntu: ~ $
Aqui o "ping youtube.com
”Processo agora está morto e o“ping bbc.com
”Ainda está em execução no terminal.
No caso, se tivéssemos usado o pkill ping
comando, teria matado tanto o ping
processos, o que é indesejável.
Sinais usados com pkill
comando
pkill
força o encerramento de um processo, enviando um sinal específico para esse processo. Existem três sinais possíveis que pkill
comando pode enviar para o processo, dependendo do comando que o usuário dá.
A seguir está a lista dos sinais disponíveis.
Sinal | Especificação |
1 (HUP ) | recarrega o processo especificado |
9 (MATAR ) | mata o processo especificado |
15 (PRAZO ) | pára ou aborta suavemente o processo especificado |
Para este tutorial, estaremos contando muito com o MATAR
sinal. Vejamos alguns exemplos para entendê-lo melhor.
Usando o pgrep
comando para obter o pid
combinando com o nome apache.
gaurav @ ubuntu: ~ $ pgrep apache 1218 10402 10403 gaurav @ ubuntu: ~ $
pkill -KIll apache
OU você também pode usar o comando com números (por exemplo, 1, 9, 15)
pkill -9 apache
Ambos os comandos mostrados acima irão matar o apache do processo. Confirmando com o pgrep
comando novamente.
gaurav @ ubuntu: ~ $ pgrep apache gaurav @ ubuntu: ~ $
Enquanto o pgrep
O comando não retorna nenhuma saída, prova que o apache do processo foi eliminado.
Conclusão
Neste tutorial, aprendemos sobre o pkill
comando e como ele é usado para encerrar o processo usando o nome do processo diretamente. Também aprendemos sobre o pgrep
comando que é usado para buscar a id do processo do processo executado por qualquer usuário específico. O pgrep
comando permite-nos verificar se o processo foi encerrado.