-
Você tem percebido
que o seu sistema
-
está se comportando
de uma maneira não comum.
-
Uma série de processos está
consumindo recursos desnecessários
-
e você precisa
tomar uma decisão.
-
Um dos comandos mais utilizados
para o envio de sinais a processos
-
é o comando "kill".
-
Comando "kill",
do inglês "matar",
-
não necessariamente
mata os processos.
-
O correto é afirmar
que ele envia
-
um determinado sinal
para o processo.
-
Eu posso enviar um sinal
para o processo parar,
-
para o processo reiniciar,
para o processo ser morto,
-
para o processo
ser suspendido,
-
enfim, eu posso enviar
vários tipos de sinais
-
para um processo
utilizando o comando "kill".
-
Vamos dar uma olhada em todas
as opções que conseguimos explorar,
-
utilizando
o comando "kill".
-
Primeiramente, eu vou executar
o comando "kill -l".
-
Quando nós executamos
esse comando,
-
ele me dá uma lista de possíveis
sinais que eu posso enviar.
-
Detalhe importante:
o comando "kill" aceita
-
com que eu passe o sinal
tanto de forma numérica
-
quanto através do próprio
nome do sinal.
-
Aqui, nós vamos abordar
-
somente as principais opções
do comando "kill".
-
Se você tiver interesse
em obter mais detalhes,
-
é só você ler o manual
do "kill", o "man kill".
-
Toda vez que eu quiser
enviar um sinal para o processo,
-
eu tenho que saber
qual é o PID do processo.
-
Então, eu vou executar
aqui um processo.
-
Eu vou enviar esse processo
para o segundo plano, parando-o,
-
e, depois, eu vou enviar um outro
sinal para o processo com o "kill".
-
Eu vou executar
o seguinte comando:
-
"grep menos ri, espaço, aspas
duplas, linux, aspas duplas, barra".
-
Eu estou procurando todas
as ocorrências da palavra Linux
-
em todos os arquivos a partir
da raiz, de forma recursiva.
-
Se eu der enter,
automaticamente,
-
ele vai mostrar uma série
de informações na tela.
-
Então, eu vou usar
-
esse comando
-
para que ele mande
o que encontrar
-
para dentro do diretório
"barra dev barra null".
-
Perceba que o comando
está executando,
-
porém ele está executando
em segundo plano.
-
Se der o comando
"ps aux | grep grep",
-
ele trouxe para mim o comando,
que está aqui.
-
Então, esse é o PID
do comando,
-
que é o número
que identifica o processo.
-
Se eu digitar o comando "jobs",
ele vai mostrar todos os processos
-
que eu executei.
-
Então, automaticamente,
tenho dois processos em execução.
-
Dois greps rodando.
-
Vamos imaginar
o seguinte:
-
se você digitar
o comando "jobs -l",
-
automaticamente, ele mostra
o PID do processo.
-
Lembre-se: para poder
executar o comando "kill",
-
eu tenho que saber
o PID do processo.
-
Vamos imaginar que eu queira
enviar um sinal
-
para esse comando
de PID 959.
-
Eu vou usar
o comando "kill espaço".
-
Qual o sinal que eu
quero enviar?
-
Se nós dermos um "kill -l",
conseguimos ver todos os sinais.
-
Vamos imaginar que eu
quero mandar um "SIGTSTP",
-
que é o sinal
de parar o processo.
-
Eu dou um "kill",
posso usar a opção -20
-
e posso usar
o PID 959.
-
Pronto.
-
Se nós digitarmos agora
o comando de "jobs -l",
-
perceba que o processo
está parado.
-
Esse processo não foi morto,
ele só foi parado
-
Automaticamente,
eu consigo mandar um sinal
-
para poder continuar
esse processo?
-
Sim.
-
"kill" menos o sinal
que eu vou utilizar,
-
que é SIGCONT,
que é o 18.
-
Eu posso tanto colocar o -18,
como eu posso colocar -SIGCONT,
-
e colocar o número
do PID, 959.
-
Pronto, se eu der o "jobs -l",
o processo voltou a ser executado.
-
O que nós fizemos?
-
Pegamos um processo, enviamos
um sinal com "kill" para ele parar.
-
Esse processo parou.
-
Imagine que fosse
um processo
-
que estava consumindo
muito recurso na sua máquina.
-
E, depois,
nós demos um sinal
-
para ele continuar a execução
normalmente.
-
Um outro sinal que podemos
mandar para o processo
-
é o sinal para ele parar.
-
O sinal padrão
de parada de processo
-
é o sinal 15
ou SIGTERM.
-
Esse sinal permite com que eu
pare o processo de forma tranquila.
-
Sabe quando você dá,
por exemplo,
-
o comando "systemctl stop"
e o nome do serviço?
-
Ou você quer que um processo
pare de forma tranquila,
-
sem ser parado
abruptamente?
-
A opção padrão de parada
de processo é essa: -15 ou SIGTERM.
-
Eu vou executar agora na tela
e vamos ver o que acontece.
-
"kill -15 959",
que é o PID.
-
Pronto.
-
Se der um "jobs -l", estará dizendo
que o processo foi terminado.
-
Processos terminados
não podem ser continuados,
-
ou seja, ele acabou
de ser finalizado.
-
Se nós dermos
novamente um "jobs -l",
-
ele não mais aparece na listagem
dos processos em execução.
-
Existe uma outra opção
do comando "kill",
-
que é o que as pessoas
associam
-
ao fato dele ser usado
para matar processos,
-
que é a opção -9
-
Ela manda um sinal
chamado SIGKILL,
-
ou seja, ela manda o processo
ser morto de forma abrupta.
-
Se você tiver algum arquivo aberto,
o "kill" não vai se importar.
-
Se alguém estiver usando esse
arquivo, ele não vai se importar.
-
Ele simplesmente vai parar
abruptamente o processo.
-
Apesar desta informação ser enviada
diretamente para o processo,
-
isso pode ocasionar
alguns problemas graves
-
de corrompimento de dados
no seu sistema,
-
como, por exemplo,
se você mandar
-
um sinal com -9
para um banco de dados.
-
Eu vou executá-lo
agora, aqui no terminal,
-
para vocês entenderem
o poder que ele tem.
-
Vamos executar
o comando "jobs -l".
-
Eu ainda tenho um outro
processo do grep executando
-
com o PID 965.
-
Vou dar um "kill -9 965".
-
E vou dar um "jobs -l".
-
Perceba que, agora, o processo
não foi parado, ele foi morto.
-
Então, ele mandou um sinal
para matar o processo.
-
É possível matar vários processos
ao mesmo tempo?
-
Sim.
-
Nós vamos ver aqui uma lista
de processos e vamos matá-los,
-
todos com o comando "kill".
-
Eu vou executar novamente
o "grep -ri,
-
a palavra linux na raiz,
-
dois e,
-
maior que um, maior
que barra dev, barra null",
-
mandando
para segundo plano.
-
Pronto, vou rodar
algumas outras vezes.
-
Vou executar 10 vezes
esse comando.
-
Se nós dermos
um "jobs -l", está lá.
-
Todos os PIDs dos processos
que estão rodando
-
Para você finalizar todos
os processos ao mesmo tempo,
-
a gente vai executar
o seguinte comando:
-
eu vou capturar todos
os PIDs e vou executar,
-
"kill" e aí, podemos passar
tanto -9 quanto -15.
-
Lembrando que -9 vai matar
o processo abruptamente
-
e o -15 vai somente parar
o processo de forma tranquila.
-
Vou usar o sinal -9,
que é o SIGKILL,
-
e posso passar todos os PIDs,
separados por espaço.
-
Perceba que realmente
dá trabalho.
-
Se tivesse 100
processos rodando,
-
eu teria que passar
os 100 números dos PIDs.
-
Se eu der um "jobs -l", só ficou
executando o processo 1037,
-
que, provavelmente,
eu o pulei aqui da lista.
-
Vamos aproveitar, então,
e treinar o -15.
-
Pronto.
-
Esse é o comando "kill",
-
comando usado para podermos
enviar um sinal para o processo.
-
Você pode mandar um sinal
para ele parar, continuar,
-
para ele suspender,
para ele reiniciar.
-
Tudo depende do quanto você
precisa que o sinal seja enviado
-
e como você quer
que esse comando se comporte.
-
O comando "kill" permite
matar processos
-
utilizando o PID,
o "Process Identification".
-
Existem dois comandos
que facilitam muito a nossa vida
-
quando o objetivo é matar
vários processos ao mesmo tempo.
-
Esses comandos
são "PKILL" e "KILLALL".
-
O PKILL permite matar processos
utilizando o nome do processo,
-
assim como KILLALL.
-
Então, todos os sinais que enviei
para os processos usando kill,
-
eu posso fazer também
com os comandos PKILL e KILLALL,
-
porém, ao invés
de eu passar o PID,
-
eu passo o nome
do processo.
-
Vamos executar agora.
-
Eu vou gerar uma lista de processos
novamente com o comando grep.
-
Cinco processos foram gerados
com esse comando grep:
-
"grep menos ri, linux, barra 2,
e comercial, maior que 1,
-
maior que barra dev,
barra null, e comercial".
-
Se nós dermos um "jobs -l",
estão lá todos os processos.
-
Todos os processos
tem o nome de "grep".
-
Nesse momento, eu vou
executar o comando "pkill"
-
e posso usar todas
as opções de sinais
-
que vimos no "kill",
-9, -15.
-
Eu vou usar a opção -15 para parar
esses processos de forma natural.
-
E, ao invés de eu
passar PID por PID,
-
como eu faria no "kill"
eu passo simplesmente o nome
-
do comando que foi executado,
no caso aqui, o próprio "grep".
-
Quando eu dou
um enter,
-
ele termina todos os processos
com o nome "grep".
-
Isso permite com que eu
tenha muito mais velocidade
-
na execução do comando
quando quiser finalizar um processo
-
ou vários processos
utilizando o nome.
-
O comando
KILLALL funciona
-
de maneira parecida
com o comando PKILL.
-
Nós conseguimos
matar diversos processos
-
utilizando o nome
dos processos.
-
Eu vou executar, agora,
novamente o "grep"
-
para que possamos visualizar isso
acontecendo dentro do sistema.
-
Eu vou executar agora
5 vezes o comando "grep"
-
para que gerem
os processos
-
e a gente possa utilizar
o KILLALL para matá-lo.
-
1, 2, 3, 4, 5.
-
Se nós executarmos o comando
"jobs -l", está lá,
-
5 processos
de execução.
-
O nome do processo é "grep".
-
Eu vou usar o "killall"
para poder matar esses processos.
-
Vou utilizar os mesmos sinais
que eu uso no "kill" e no "pkill".
-
Vou usar, por exemplo, o -9
para matar o processo forçando.
-
E o comando
que quero matar
-
são todos os comandos
que contêm o nome "grep".
-
Recebi uma mensagem
que o comando "killall"
-
não foi encontrado.
-
Vamos instalá-lo através do comando
"apt install psmisc".
-
Vou utilizar
a opção menos y
-
para ele dizer sim
para todos os questionamentos.
-
Pronto, uma vez
instalado o "psmisc",
-
ele trouxe para mim
o "killall".
-
E eu vou executar novamente
o comando "killall -9"
-
e, automaticamente,
ele matou
-
todos os processos
que tinham o nome "grep".
-
Com esses três comandos,
"kill", "pkill" e "killall",
-
nós podemos enviar diversos
sinais aos processos.
-
Podemos parar, reiniciar,
suspender, continuar.
-
Ou seja, você pode
manipular os processos
-
conforme
a sua necessidade
-
e se tornar ainda
mais eficiente
-
na operação do terminal Linux,
utilizando processo.