Domine o processo de eliminação do Linux usando ps, pgrep, pkill e mais
Gerenciar processos no Linux pode parecer assustador para um novo administrador de sistema (sysadmin) à primeira vista. Mas com uma pequena explicação e demonstração, você aprenderá como encontrar e executar processos kill do Linux é apenas uma questão de usar ferramentas de linha de comando como ps
e kill
.
Neste artigo, você aprenderá comandos para localizar processos em execução e incorretos, eliminar (encerrar) processos em execução, localizar processos em segundo plano e muito mais em qualquer sistema operacional Linux.
Ao final do artigo, você gerenciará processos com base em números de identificação de processos (PIDs) na linha de comando, como um profissional Linux. Continue lendo para aprender tudo sobre comandos de gerenciamento de processos no Linux!
Pré-requisitos
Este artigo será um passo a passo sobre como gerenciar processos no Linux. Se quiser praticar, você precisará do seguinte:
- Um host Linux, que pode ser uma máquina virtual ou física.
- Para experimentar os exemplos do PowerShell, instale o PowerShell 7.1.1 em um host Linux.
- Uma conta de usuário não root. Embora o acesso root não seja necessário, haverá um exemplo em que o usuário root pode encerrar o processo em execução de outro usuário.
A distribuição do Linux que você escolhe usar depende de você. Este artigo será baseado no Ubuntu 20.04 LTS. No entanto, os comandos são padrão para o sistema operacional Linux.
Pronto para começar? Bom, vamos mergulhar.
Gerenciando Processos no Linux
Ocasionalmente, você pode se deparar com um cenário em que precisa interromper um processo em execução em um sistema Linux. Por exemplo, você pode ter um script bash executado de acordo com uma programação. Esse script bash é configurado para ser executado como outro usuário por meio de um trabalho cron (agendador de processos do Linux).
Às vezes, esse script gera processos errôneos que podem fazer com que o script falhe. Como você elimina esses processos errôneos sem reinicializar o sistema ou interromper o script?
Nas próximas seções, você percorrerá os comandos usados para localizar e encerrar ou eliminar processos em um sistema Linux. Cada seção será baseada na anterior. Você aprenderá sobre os comandos ps
, top
, pgrep
, kill
e pkill
todos nativos do Linux.
Como bônus, os comandos equivalentes do PowerShell Get-Process
e Stop-Process
serão incluídos se os comandos nativos do Linux não forem seu estilo.
Ferramentas para localizar processos
Antes de encerrar um processo, você deve localizar o processo correto a ser direcionado. O PID exclusivo permite uma segmentação precisa. Continue lendo para saber como localizar os processos corretos para rescisão.
Usando o comando ps
para exibir informações do processo
O comando Status do Processo ou ps
exibe informações relacionadas aos processos ativos em um sistema Linux. Você pode localizar um processo em execução e até mesmo processos em segundo plano com ps
.
O comando ps
irá, por padrão, exibir todos os processos para a identificação efetiva do usuário (EUID) do usuário atual. A execução do comando ps
, conforme mostrado abaixo, retornará todos os processos em execução que seu usuário pode encerrar.
ps
Encontrando informações expandidas do processo usando o comando top
E se você quiser encontrar informações constantemente atualizadas sobre processos em execução e métricas do sistema, nesse caso, você pode usar o comando top
. Ao contrário do ps
, o comando top
atualiza as informações do processo na tela durante um intervalo definido.
Ao executar o comando top
, você verá mais do que apenas um PID. Incluídos nos detalhes do processo estão as porcentagens de CPU e memória, Valores agradáveis (prioridade do processo de agendamento da CPU) e a prioridade do processo (PR) definida pelo kernel do Linux.
Para um administrador de sistema novo ou experiente, o comando top
costuma ser a principal ferramenta para gerenciar recursos e processos vitais do sistema. Conforme mostrado abaixo, a saída do comando top
exibe mais informações do processo do que o comando ps
, incluindo métricas gerais do sistema.
htop
é uma variante aprimorada de top
que inclui várias melhorias, como uma saída de terminal colorida.
Digamos que você queira inspecionar a memória ou os recursos da CPU que um processo está consumindo. Nesse caso, você pode usar a opção p
de top
conforme mostrado abaixo.
top -p 2113
Talvez você precise exibir todos os processos em execução para um nome de usuário específico. O comando top
oferece a opção u
para exibir apenas os processos de um usuário específico. Como visto no exemplo abaixo, são mostrados os PIDs que correspondem apenas ao ID do usuário bkindle
.
top -u bkindle
Localizando PIDs de processos específicos com o comando pgrep
Originalmente um comando Solaris, pgrep
foi portado para uso com Linux. Combinando o poder de pesquisa do comando grep
e o gerenciamento de processos de ps
, pgrep
oferece flexibilidade para encontrar o processo exato a ser alvo.
Embora ps
exiba mais informações, pgrep
foi projetado para retornar apenas o PID dos processos retornados. pgrep
ajuda a localizar o processo usando os muitos parâmetros de pesquisa disponíveis. No exemplo a seguir, pgrep
é mostrado procurando por qualquer processo correspondente a vmtoolsd
.
pgrep vmtoolsd
Da mesma forma, especifique um ID de usuário com a opção u
para recuperar apenas processos associados a esse usuário específico. Conforme mostrado abaixo, apenas um único PID é retornado para o usuário bkindle
e o processo vmtoolsd
.
pgrep -u bkindle vmtoolsd
Encontrando processos com Get-Process
do PowerShell no Linux
Os comandos típicos do Linux funcionam muito bem, mas você sabia que o PowerShell também é capaz de gerenciar processos do Linux? O cmdlet Get-Process
funciona de forma semelhante ao comando ps
do Linux e retorna informações do processo. Por exemplo, talvez você precise encontrar todos os processos em execução pelo usuário atual, bkindle
. Conforme mostrado abaixo, encontre todos os PIDs (rotulados como ID por Get-Process
) do usuário bkindle
.
Get-Process -IncludeUserName |
Where-Object {$_.UserName -eq 'bkindle'} |
Select-Object -Property 'Id','UserName','ProcessName'
Relacionado: Como usar o Where-Object do PowerShell para filtrar todas as coisas
Depois de aprender como localizar diferentes processos, continue lendo para descobrir todas as maneiras de encerrar ou encerrar um processo no Linux!
Eliminando processos usando os comandos Kill no Linux
Nas seções anteriores, você aprendeu como localizar o PID do processo para o qual deseja enviar um sinal de interrupção usando comandos nativos do Linux e do PowerShell. As próximas seções explicarão como usar os programas kill
e pkill
, seus sinais associados e opções de linha de comando.
Sinais Linux e gerenciamento de processos
Sinais são o método que o Linux usa para se comunicar com processos em execução no sistema operacional. Os três sinais principais que o comando kill
usa para encerrar processos são:
- 1 (SIGHUP) – Encerra programas interativos e faz com que daemons (serviços em segundo plano) releiam os arquivos de configuração que o processo usa.
- 9 (SIGKILL) – Força a saída do processo sem executar tarefas de desligamento normal.
- 15 (SIGTERM) – Permite que um processo termine normalmente, como fechar arquivos abertos quando terminar. Este é o sinal padrão usado quando nenhum número é especificado ao usar o comando kill.
Embora este artigo se concentre apenas nos três sinais principais usados para processos de abate, há um total de 64 sinais disponíveis. Use
kill -l
para obter a lista de sinais e seu número correspondente.
Agora que você entende os três sinais principais usados para encerrar um processo, aprenda como encerrar um processo nas próximas seções.
Usando o comando kill
para encerrar um processo
Neste próximo exemplo, você usará o comando kill
. Finja por um momento que você está executando uma instância do PowerShell, chamada pwsh
, e o PID atribuído é 22687. Uma maneira de encerrar esse processo é mostrada abaixo.
- Use
pgrep pwsh
para determinar o PID do processopwsh
, usado no comandokill
. - Use
kill -s TERM 22687
para encerrar o processopwsh
normalmente. O comandoTERM
mapeia para o sinal 15 (SIGTERM) e é indicado usando o parâmetros
do comandokill
. - Use sua escolha de
top
,ps
oupgrep
para verificar se o PID não está mais listado.
Abaixo é mostrado um exemplo do processo acima em um terminal bash Ubuntu 20.04 LTS.
O comando
killall
encerrará todos os processos com base em um nome em vez de PID, o que pode tornar este comando bastante destrutivo se usado de forma descuidada. Se você optar por usar este comando, entretanto, use a opçãoi
para fazer com que o comando peça confirmação.
Eliminando processos por nome com pkill
Você deve ter notado que o comando kill
só funciona com IDs de processos. Isso pode tornar o encerramento de um processo um processo complicado de várias etapas. O comando pkill
, incluído nos pacotes procps e procps-ng, finaliza um processo com base em um nome pesquisado.
Funcionalmente, o comando pkill
atua como um wrapper em torno do programa pgrep
. O comando pkill
envia um sinal especificado para cada processo encontrado em vez de apenas listar os PIDs no terminal. pkill
difere de kill
porque pkill
só pode usar o nome de um processo, não o PID.
O comando
pkill
não está disponível, por padrão, no Ubuntu 20.04 LTS. Você terá que baixar e instalar o aplicativo. Para fazer isso, executesudo apt install mcollective-plugins-process -y
.
Para encerrar um processo usando pkill
, execute as seguintes etapas:
- Use
ps
para verificar se o aplicativo nano (um editor de texto de linha de comando) está em execução no momento. Esta etapa é opcional, mas é uma verificação de segurança antes de encerrar um processo. - Use
pkill -9 nano
para encerrar o aplicativo nano à força.
Abaixo é mostrado um exemplo do processo acima em um terminal bash Ubuntu 20.04 LTS.
Eliminando um processo com o comando Top
Ao executar o comando top
para visualizar os processos em execução, você pode encerrar um determinado processo pressionando a tecla k. Você verá um prompt interativo solicitando o PID de um processo a ser eliminado.
Conforme mostrado abaixo, execute o comando top
e pressione k. Insira o PID que você deseja eliminar e pressione a tecla Enter para encerrar imediatamente o PID.
A seguir, aprenda mais uma alternativa aos comandos nativos do Linux usando o comando Stop-Process
do PowerShell!
Usando o comando Stop-Process
do PowerShell para encerrar um processo
Se os comandos nativos do Linux não são o seu estilo, o PowerShell ajuda você! Assim como acontece com o comando kill
, você pode encerrar processos usando o cmdlet Stop-Process
no Linux. Mais uma vez, finja que você está executando um processo pwsh
do PowerShell.
- Encontre o PID com
Get-Process -ProcessName 'pwsh'
e anote os PIDs a serem encerrados. - Use
Stop-Process -Id 29992,30014
para encerrar os vários processos retornados. - Use
Get-Process -ProcessName 'pwsh'
e verifique se os PIDs,29992
e30014
não estão mais listados, o que significa que foram encerrados.
Você também pode usar
Get-Process
e o métodokill
para encerrar um ou vários processos:(Get-Process -Id [PID]).Kill()
ou(Get-Process -Id [PID1,2,3,4]).Kill()
.Tenha cuidado ao usar o parâmetro
ProcessName
. O uso deste parâmetro se comporta de maneira semelhante ao comandokillall
e eliminará todos os processos que correspondam ao(s) nome(s) fornecido(s).
Abaixo está um exemplo do processo acima em um terminal bash Ubuntu 20.04 LTS.
Próximos passos
Agora você deve conhecer as várias maneiras de localizar e encerrar processos no Linux! Para o seu próximo desafio, tente eliminar processos remotamente usando conexões SSH ou eliminando processos que possam estar em execução em contêineres.
Relacionado: Um cara do Windows em um mundo Linux: Configurando SSH no Linux