em um sistema operacional, existem muitos programas, que podem ser executados por um usuário ou pelo próprio sistema operacional (como os Serviços de Sistema). Tais programas que estão rodando no sistema são chamados de “processos”. Normalmente, um processo termina por si só quando eles terminam com a sua tarefa, ou quando você lhes pede para sair, pressionando um atalho de teclado ou clicando no botão “Fechar”.
no entanto, às vezes um processo pode desligar ou consumir um monte de CPU ou RAM. Nesta situação, você gostaria de “matar” manualmente o processo. Neste artigo, vamos olhar para várias ferramentas que você pode usar para matar processos em um sistema Linux.
localizando o processo para matar
a fim de matar um processo, você deve primeiro localizar os detalhes do processo. Você pode fazer isso através de três comandos — top
ps
pidof
e pgrep
. Dependendo da situação, você pode usar um desses comandos para este propósito.
como veremos mais adiante neste artigo, você pode matar um processo pelo seu nome ou pelo seu ID de processo (PID). O PID é um número que identifica um processo de forma única. Matar pelo ID do processo é útil quando você quer matar apenas um processo específico. Por outro lado, matar pelo nome do processo é útil quando você quer matar todas as instâncias em execução de um programa em particular.
localizando o processo com o comando superior
vamos primeiro olhar para o comando top
. Acenda o comando superior escrevendo:
top
irá obter uma interface interactiva, como mostrado abaixo. Você pode navegar por esta lista para encontrar o nome ou o PID do processo que você deseja matar.
para navegar nesta lista, pode usar as teclas cima / baixo. Além disso, o comando top também tem maneiras de filtrar processos pelo uso da CPU, nomes de usuário e processos, que você pode ler neste guia.
a coluna mais à esquerda contém o PID do processo, e o lado direito contém o nome do programa. Como exemplo, na imagem acima temos o processo vnstatd
executando com um ID de processo de 263.
Localização o processo com o ps e comandos grep
Outra maneira de obter uma lista de processo está executando:
ps aux
o comando acima, temos usado as bandeiras aux
, que possuem os seguintes significados:
-
a
: Mostrar processos de todos os usuários -
u
: exibe o usuário que está usando o processo de -
x
: Mostra todos os processos. (Sem isso,ps
não mostrará processos em execução em um ambiente gráfico.)
o resultado do comando é semelhante ao de top
. O PID está disponível na segunda coluna da esquerda, e o nome do processo está disponível na coluna mais à direita.
A vantagem de usar ps
é que você pode facilmente filtrar essa lista com o grep
comando. Por exemplo, para localizar um processo associado com o termo “vnstat”, você pode usar:
ps aux | grep -i vnstat
Aqui, nós temos dois resultados — o vnstatd
processo, bem como o grep
processo. Desde que nós estávamos procurando por todas as instâncias do termo “vnstat”, e nós também estávamos executando grep
com “vnstat” como seu argumento, temos grep
bem nos resultados.
assim, mesmo quando não há processos relacionados com o” vnstat”em execução, obteríamos uma entrada mostrando o processo:
assim, mesmo que tenhamos um resultado, não há processos que nos interessem.
Encontrar o PID com pidof e pgrep
top
e ps
grep
combinação nos permite busca por processos. Por outro lado, se você souber o nome exato de um processo, você pode usar pidof
para encontrar seu PID.
Usandopidof
é bastante simples. Para obter o Pid de um processo com o nome exato de “nginx”, use:
pidof nginx
Se há processos com o nome exato de “nginx”, você vai obter uma lista de PIDs, como mostrado abaixo. Se não houver nenhum, você não terá nada como a saída.
If you don’t know the full name, you can usepgrep
em vez depidof
. Como um exemplo, para procurar todos os processos que contenham “ngin” em algum lugar em seu nome, execute:
pgrep ngin
Isso irá corresponder a processos com o nome exato de “nginx”, bem como qualquer outro processo que coincide com os mesmos critérios. Para o nosso sistema, note que temos todos os PIDs que pertenciam a “nginx” na imagem acima.
The pidof
andpkill
commands give you far less information. Como veremos na próxima seção, há algumas circunstâncias em que você não pode matar um processo. O resultado de top
e ps
contém informações adicionais que o ajudam a determinar se pode mesmo matar um processo.que processos pode matar?
Agora que localizamos o processo, é hora de matá-lo. No entanto, antes de aprendermos a fazê-lo, há algumas coisas que precisam de saber.
Se você é um usuário normal, você pode matar seus próprios processos, mas não aqueles que pertencem a outros usuários. Both top
and ps
show the user under which a process is running. No caso de top
, a segunda coluna contém o nome do utilizador. Com ps aux
, a primeira coluna contém o nome do utilizador.
no entanto, um usuário de raiz pode matar todos os processos. Você pode adicionar sudo
antes de qualquer comando para executá-lo como root, ou obter um shell de root digitando su
e, em seguida, executar o comando.
no Linux, quando um processo é morto, um” sinal de terminação ” é entregue ao processo. Embora existam muitos tipos diferentes de sinais, Nós lidamos principalmente com os sinais “SIGTERM” e “SIGKILL”. Têm um valor numérico de 15 e 9, respectivamente. Por padrão, todos os comandos de eliminação de processos usam “SIGTERM”, que permite que o programa execute algum código antes que ele saia, permitindo-lhe terminar”graciosamente”. Se você quiser terminar o processo à força, você pode usar “SIGKILL” em vez disso.
O núcleo Linux mantém alguma informação relacionada com o estado de um processo. Quando um processo termina, o kernel deve manter a informação ao redor, de modo que o processo pai pode descobrir se o processo filho foi capaz de completar suas tarefas e se terminou por conta própria, ou foi morto. Até que o pai o tenha feito, esses processos “zumbis” aparecerão na lista de processos. Você não pode matar tal processo porque é apenas uma entrada na lista de todos os processos, e ele não tem um processo real associado a ele.
Quando um processo realiza operações de entrada/saída (como ler ou escrever para discos), diz-se que ele está em um estado de “sono ininterrupto”. Não se pode matar um processo neste estado.
pode dizer se um processo está no estado”zombie “(Z) ou”sono ininterrupto”(D) olhando para a 8ª coluna dotop
/ps
saída.
a Matar um processo
Existem vários comandos que você pode usar para matar um processo — kill
killall
pkill
e top
. Vamos começar do mais simples: o comando killall
.
Matar processos com o comando killall
o comando killall
é uma das formas mais fáceis de matar um processo. Se você souber o nome exato de um processo, e você sabe que ele não está funcionando como outro usuário e não Z ou D estados, então você pode usar este comando diretamente, não há nenhuma necessidade para localizar manualmente o processo que descrevemos acima.
Por padrão, por exemplo, para matar um processo chamado “firefox”, execute:
killall firefox
para matar à força o processo com SIGKILL, execute:
killall -9 firefox
Você também pode usar -SIGKILL
em vez de -9
.
Se você quiser matar processos interativamente, você pode usar -i
, assim:
killall -i firefox
Se você quer matar um processo em execução como um usuário diferente, você pode usar sudo
:
sudo killall firefox
Você também pode matar um processo que está em execução por um determinado período de tempo, com o -o
e -y
sinalizadores. Então, se você quer matar um processo que está em execução por mais de 30 minutos, use:
killall -o 30m <process-name>
Se você quer matar um processo que está em execução durante menos de 30 minutos, use:
killall -y 30m <process-name>
da mesma forma, use as seguintes abreviaturas para as respectivas unidades de tempo:
s | seconds |
m | minutes |
h | hours |
d | days |
w | weeks |
M | months |
y | years |
Killing processes with the pkill command
Sometimes, you only know part of a program’s name. Assim como pgrep
pkill
permite matar processos com base em correspondências parciais. Por exemplo, se você quer matar todos os processos com o nome de apache
no nome, execute:
pkill apache
Se você deseja usar um SIGKILL em vez de um SIGTERM, use:
pkill -9 apache
Novamente, você também pode usar -SIGKILL
em vez de -9
.
Matar processos com o comando kill
Usando o comando kill é simples. Logo que tenha descoberto o PID do processo que deseja matar, poderá terminá-lo com o comando kill
. Por exemplo, se você quiser matar um processo com um PID de 1234, então use o seguinte comando:
kill 1234
como mencionamos anteriormente, o padrão é usar um SIGTERM. Para usar um SIGKILL, use -9
ou -SIGKILL
como vimos antes:
kill -9 1234
Matando processos com o comando top
é muito fácil matar processos usando o top
comando. Primeiro, procure o processo que você quer matar e anote o PID. Em seguida, pressione k
enquanto o topo está em execução (isto é sensível à capitalização). Ele irá levá-lo a entrar no PID do processo que você quer matar.
Depois de entrar no PID, carregue em enter. Agora ele vai perguntar Que sinal você quer usar para matar o processo. Se você quiser usar SIGTERM (15), Então simplesmente pressione enter como é o sinal padrão. Se você quiser usar SIGKILL (9), em seguida, digite 9 e pressione enter.
Se deixar o ID do processo em branco e carregar em enter directamente, irá terminar o processo mais avançado da lista. Pode deslocar-se com as teclas de Cursores e alterar o processo que deseja matar desta forma.
Conclusão
neste post, vimos as várias maneiras de matar processos no Linux. A aprendizagem destes comandos é essencial para uma administração e gestão do sistema adequadas. Se você quiser explorar mais desses comandos, dê uma olhada em suas respectivas páginas de manual.Se gostou deste post, por favor partilhe-o