Pesquisa de site

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.

  1. Use pgrep pwsh para determinar o PID do processo pwsh, usado no comando kill.
  2. Use kill -s TERM 22687 para encerrar o processo pwsh normalmente. O comando TERM mapeia para o sinal 15 (SIGTERM) e é indicado usando o parâmetro s do comando kill.
  3. Use sua escolha de top, ps ou pgrep 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ção i 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, execute sudo apt install mcollective-plugins-process -y.

Para encerrar um processo usando pkill , execute as seguintes etapas:

  1. 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.
  2. 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.

  1. Encontre o PID com Get-Process -ProcessName 'pwsh' e anote os PIDs a serem encerrados.
  2. Use Stop-Process -Id 29992,30014 para encerrar os vários processos retornados.
  3. Use Get-Process -ProcessName 'pwsh' e verifique se os PIDs, 29992 e 30014 não estão mais listados, o que significa que foram encerrados.

Você também pode usar Get-Process e o método kill 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 comando killall 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

Artigos relacionados