Como Mestre Linux Mata Processos Usando ps, pgrep, pkill e Mais

Gerenciar processos no Linux pode parecer assustador para um novo administrador de sistema (sysadmin) no início. Mas com um pouco de explicação e demonstração, você aprenderá como encontrar e executar processos de encerramento no 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 com problemas, encerrar (terminar) processos em execução, encontrar processos em segundo plano e muito mais em qualquer sistema operacional Linux.

Até o final do artigo, você estará gerenciando processos com base nos números de identificação de processos (PIDs) a partir da linha de comando como um profissional do Linux. Continue lendo para aprender tudo sobre os comandos de gerenciamento de processos no Linux!

Pré-requisitos

Este artigo será um guia sobre como gerenciar processos no Linux. Se você quiser colocar a mão na massa, você precisará do seguinte:

  • A Linux host, which can be a virtual machine or a physical machine.
  • Para experimentar os exemplos do PowerShell, instale PowerShell 7.1.1 em um host Linux.
  • A non-root user account. While root access is not required, there will be an example where the root user can kill the running process of another user.

A distribuição do Linux que você escolher usar fica a seu critério. 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? Ótimo, vamos lá.

Gerenciando Processos no Linux

Em algumas ocasiões, 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 que é executado em um cronograma. 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 incorretos que podem fazer com que o script falhe. Como você pode encerrar esses processos incorretos sem reiniciar o sistema ou interromper o script?

Nas próximas seções, você aprenderá sobre os comandos utilizados para localizar e encerrar ou encerrar processos em um sistema Linux. Cada seção irá se basear na anterior. Você aprenderá sobre os comandos ps, top, pgrep, kill e pkill, todos nativos do Linux.

Como bônus, serão incluídos os comandos equivalentes do PowerShell Get-Process e Stop-Process caso você não esteja familiarizado com os comandos nativos do Linux.

Ferramentas para Localizar Processos

Antes de encerrar um processo, você precisa localizar o processo correto para direcionar. O PID único permite um direcionamento preciso. Continue lendo para aprender como localizar os processos corretos para encerramento.

Usando o comando ps para exibir informações do processo

O comando Estado do Processo ou comando 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 o comando ps.

O comando ps irá, por padrão, exibir todos os processos para a identificação do usuário efetivo (EUID) do usuário atual. Executar o comando ps, conforme mostrado abaixo, retornará todos os processos em execução que seu usuário pode encerrar.

ps
Displaying processes matching the EUID (effective user ID) for the user bkindle.

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 ao longo de um intervalo definido.

Ao executar o comando top, você verá mais do que apenas um PID. Incluídas com os detalhes do processo estão porcentagens de CPU e memória, Valores Nice (prioridade de processamento da CPU), e a prioridade do processo (PR) definida pelo kernel do Linux.

Para um sysadmin novo ou experiente, o comando top é frequentemente a ferramenta principal para gerenciar recursos vitais do sistema e processos. Como mostrado abaixo, a saída do comando top exibe mais informações de processo do que o comando ps, incluindo métricas gerais do sistema.

The top command on Ubuntu Desktop 20.04 LTS showing all running PID’s.

htop é uma variante aprimorada do top que inclui várias melhorias, como uma saída de terminal colorida.

Vamos dizer que você gostaria de inspecionar a memória ou os recursos da CPU que um processo está consumindo. Nesse caso, você pode usar o switch p do top conforme mostrado abaixo.

top -p 2113
The top command displaying information on only one PID, 2113.

Talvez você precise exibir todos os processos em execução para um nome de usuário específico. O comando top oferece o switch u para exibir apenas os processos de um usuário específico. Como visto no exemplo abaixo, os PIDs que correspondem apenas ao ID de usuário bkindle são mostrados.

top -u bkindle
The top command displaying only processes for the user bkindle.

Localizando PIDs de Processo Específicos com o Comando pgrep

Originalmente um comando do Solaris, pgrep foi portado para uso com Linux. Combinando o poder de busca do comando grep e o gerenciamento de processos do ps, pgrep oferece flexibilidade para encontrar o processo exato a ser direcionado.

Embora o ps exiba mais informações, o pgrep é projetado para retornar apenas o PID dos processos encontrados. O pgrep ajuda a localizar o processo usando o muitos parâmetros de busca disponíveis. No exemplo a seguir, o pgrep é mostrado procurando por qualquer processo que corresponda a vmtoolsd.

pgrep vmtoolsd
Using pgrep to obtain all PIDs associated with vmtoolsd.

Da mesma forma, especifique um ID de usuário com a opção u para recuperar apenas os processos associados a esse usuário específico. Como mostrado abaixo, apenas um PID é retornado para o usuário bkindle e o processo vmtoolsd.

pgrep -u bkindle vmtoolsd
Retrieving the specific PID for the vmtoolsd process associated with the user bkindle.

Localizando Processos com o Get-Process do PowerShell no Linux

Comandos típicos do Linux funcionam muito bem, mas você sabia que o PowerShell pode gerenciar processos no Linux também? O cmdlet Get-Process funciona de maneira semelhante ao comando ps no Linux e retorna informações sobre processos. Por exemplo, talvez você precise encontrar todos os processos em execução pelo usuário atual, bkindle. Como mostrado abaixo, encontre todos os PIDs (rotulados como ID pelo Get-Process) do usuário bkindle.

Get-Process -IncludeUserName |
	Where-Object {$_.UserName -eq 'bkindle'} |
	Select-Object -Property 'Id','UserName','ProcessName'
Retrieving Linux PID’s with PowerShell’s Get-Process cmdlet.

Relacionado: Como Usar o Where-Object do PowerShell para Filtrar Tudo

Depois de aprender como localizar diferentes processos, continue lendo para descobrir todas as maneiras de encerrar ou finalizar um processo no Linux!

Encerrando Processos Usando os Comandos Kill no Linux

Nas seções anteriores, você aprendeu como localizar o PID do processo ao qual deseja enviar um sinal de encerramento 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 do 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 primários 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 utiliza.
  • 9 (SIGKILL) – Força o processo a sair sem realizar tarefas de desligamento graciosas.
  • 15 (SIGTERM) – Permite que um processo termine graciosamente, 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 principais sinais usados para encerrar processos, há um total de 64 sinais disponíveis. Use kill -l para obter a lista de sinais e seus números correspondentes.

Great video on understanding process signals

Agora que você entende os três principais sinais usados para encerrar um processo, aprenda como encerrar um processo nas próximas seções.

Usando o comando kill para encerrar um processo

No 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 este processo é mostrada abaixo.

  1. Use pgrep pwsh para determinar o PID do processo pwsh, usado no comando kill.
  2. Use o comando kill -s TERM 22687 para encerrar o processo pwsh de forma graciosa. O comando TERM mapeia para o sinal 15 (SIGTERM) e é indicado usando o parâmetro s do comando kill.
  3. Use a sua escolha de top, ps ou pgrep para verificar que o PID não está mais listado.

Abaixo está um exemplo do processo acima a partir de um terminal bash do Ubuntu 20.04 LTS.

Using kill and associated commands to terminate the pwsh process.

O comando killall irá encerrar todos os processos com base em um nome em vez do PID, o que pode tornar esse comando bastante destrutivo se usado descuidadamente. Se escolher usar este comando, no entanto, utilize a opção i para que o comando peça confirmação.

Encerrando Processos por Nome com pkill

Você pode ter notado que o comando kill só funciona com IDs de processos. Isso pode tornar a terminação de um processo um processo complicado de vários passos. O comando pkill, incluído nos pacotes procps e procps-ng, encerra um processo com base em um nome pesquisado.

Functionally, o comando pkill atua como um invólucro 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 no sentido de que 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ê precisará baixar e instalar o aplicativo. Para fazer isso, execute sudo apt install mcollective-plugins-process -y.

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

  1. Use ps para verificar se o aplicativo nano (um editor de texto de linha de comando) está em execução. 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 de forma forçada.

Abaixo está um exemplo do processo acima a partir de um terminal bash do Ubuntu 20.04 LTS.

Using the pkill command to forcefully terminate the nano process.

Encerrando um Processo com o Comando Top

Ao executar o comando top para visualizar os processos em execução, você pode encerrar um determinado processo com a tecla k. Você verá um prompt interativo solicitando o PID do processo a ser encerrado.

Como mostrado abaixo, execute o comando top e pressione k. Insira o PID que deseja encerrar e pressione a tecla Enter para encerrar imediatamente o PID.

Use top to specify a process to terminate using the k keystroke.

Em seguida, aprenda mais uma alternativa aos comandos nativos do Linux usando o comando Stop-Process no PowerShell!

Usando o Comando Stop-Process do PowerShell para Encerrar um Processo

Se os comandos nativos do Linux não são do seu estilo, o PowerShell tem você coberto! Assim como com o comando kill, você pode encerrar processos usando o Stop-Process cmdlet no Linux. Mais uma vez, finja que está executando um processo do PowerShell pwsh.

  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 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().

Exercite cautela ao usar o parâmetro ProcessName. Usar este parâmetro se comporta de forma semelhante ao comando killall e irá encerrar todos os processos que correspondam aos nomes fornecidos.

Abaixo está um exemplo do processo acima de um terminal bash Ubuntu 20.04 LTS.

Using PowerShell, Stop-Process to kill processes in Linux.

Próximos Passos

Você deve agora saber muitas maneiras de encontrar e encerrar processos no Linux! Para o seu próximo desafio, tente encerrar processos remotamente usando conexões SSH ou encerrando processos que possam estar em execução em contêineres.

Relacionado: Um cara do Windows em um mundo Linux: Configurando o SSH no Linux

Source:
https://adamtheautomator.com/linux-kill-process/