LPIC 1 - 103.5 CRIAR, MONITORAR E FINALIZAR PROCESSOS

Neste tópico iremos criar, monitorar, finalizar processos. Vamos também verificar processos que estão em primeiro e segundo plano, monitorar processos ativos, enviar sinais para processos e etc.


===================================================================================================
Peso 4


SINAIS E PROCESSOS

Processos são instancias de aplicações em execução. Cada processo é identificado por um número chamado de PID (Process IDentification). 

Podemos usar vários programas para monitorar processos. Vejamos alguns deles:

PS
Mostra os processos de maneira detalhada.

Exemplo:
ps
  PID TTY          TIME CMD
 3217 pts/0    00:00:00 sudo
 3219 pts/0    00:00:00 su
 3220 pts/0    00:00:00 bash
 3352 pts/0    00:00:00 ps

TOP
Monitora continuamente os processos, com informações sobre uso de memória e CPU que cada processo está ocupando.



PSTREE
Mostra a árvore de processos - qual processo gerou determinado subprocessos (processos filhos e processos pais).

PIDOF
Retorna o PID do nome do programa solicitado.
Exemplo:
pidof gnome-shell
3316 3181 3147 1449 1433 1368 1356 1319 1308 1234

KILL

O comando kill permite finalizar processos com problemas de execução. Quando um processo trava e fica ocupando espaço na memória, podemos encerrar esta instancia enviando um sinal para o PID do processo.

Há no total quase 60 sinais que podem ser usados para diferentes situações. Eles começam com a nomenclatura SIG+nome_referente_função. Para vermos a lista de todos os sinais digitamos kill -l.



No entanto, vamos nos concentrar nos mais importantes: SIGKILL, SIGTERM, SIGQUIT, SIGINT, SIGHUP.

Quando usamos o sigkill, significa que estamos matando o processo literalmente. SIGKILL envia um sinal de fechamento do processo ao qual ele não pode recusar: ele simplesmente encerra o processo sem salvar dados. O SIGKILL é representado pelo sinal 9.

Sintaxe:
kill [opções] [pid]

Exemplo:
kill -9 3322 - finaliza o processo 3322
kill SIGKILL 3333 - finaliza o processo 3333

Para sabermos o PID de um processo em execução, digitamos os comando que explicamos anteriomente mais lá em cima: ps, top.

Descobrindo processos facilmente

Uma maneira de descobrir o PID dos processos de uma maneira bastante fácil é digitarmos o comando abaixo:
ps aux | grep nome_do_programa - o ps irá listar todas as informações dos processos, PORÉM o grep irá filtrar com o nome que você digitou. Com o número do processo, agora podemos finaliza-lo, mudar a prioridade, reinicia-lo etc.

Caso não queira "matar" o processo de uma vez, podemos indicar uma solicitação de parada de forma "educada" onde dê tempo de salvar dados do arquivo, usando o sinal SIGTERM, ou número 15.

kill -15 PID ou kill SIGTERM PID

Para finalizarmos vários processos de uma vez:
kill -9 PID1 PID2

OBS: se não passarmos o sinal que queremos ao kill, o padrão a ser enviado será o SIGTERM

KILLALL

Ao invés de sairmos "caçando" os PID's dos processos referentes a um programa, que tal passarmos o nome dele, e em seguida, ele finalizar todos os processos de uma vez, referente aquela aplicação? Então vamos usar o comando killall.
Sintaxe:
killall [opção] nome_do_programa 

Exemplo:
killall chrome - finaliza os 320.459 processos do Google Chrome

Usando o pkill e o pgrep

O pkill é parecido com o killall, PORÉM, o pkill trabalha com expressão regular, o que significa dizer que basta você digitar parte do nome da aplicação que ele vai lá e "taca" a faca. No caso do killall, tem que digitar o nome do programa completo.
Exemplo: Queremos finalizar o Firefox
pkill fire - finaliza o firefox
killall firefox - idem acima

O pgrep procura o PID através de um nome (ou parte de um nome) de uma aplicação.

Exemplo:

pgrep -l gno - procura todos os processos iniciados com gno e lista o PID de cada um.

O SIGQUIT é parecido com o SIGKILL, só que mais "educado". Ele fecha a aplicação. Seu número de sinal é 3.
O SIGINT, interrompe um processo em execução. Corresponde a tecla de atalho ctrl+c. Corresponde ao sinal 2
SIGHUP, termina ou reinicia o processo. Valor de sinal equivalente ao número 1.

TAREFAS ADMINISTRATIVAS - BG, FG, JOBS

BG
Coloca um programa ou uma tarefa em background (segundo plano). Para abrir um programa já em modo de background, chamamos o nome do programa seguido do E comercial (&).
Exemplo:
rdesktop 10.0.0.1 & - abre o rdesktop e libera o terminal para utilização.

Caso tenha chamado o comando sem o &, e mesmo assim deseja envia-lo para background, basta digitar a combinação de teclas Ctrl+z.
Para poder voltar a utilizar o programa, usamos o comando fg [número da tarefa].

JOBS
Mostra o status das tarefas que estão em BG. Com a opção -l, mostra-se o PID do processo.

jobs -l
[1]+  4496 Parado                  rdesktop 10.0.0.1

O programa rdesktop está em background. Seu PID é 4496.

FG
Quando abrimos um programa através do terminal, ele fica vinculado ao mesmo, inutilizando-o. Como já foi dito, para liberarmos o terminal, digitamos a combinação de tecla Ctrl+z. Para trazer esta aplicação de volta para o foreground ou fg, utilizamos o comando fg [número da tarefa].

&
Envia um programa aberto pelo terminal direto para background, ou, bg. Exemplo:
shutter &
filezilla &

NOHUP

Ignora as mensagens de sinais e continua o processo até ter terminado a sua conclusão. É o famoso "só termina quando acaba".

Vamos dizer que você precisa rodar um comando. Só que esse comando vai demorar muito. Além de você estar remotamente em uma máquina, você precisa executar o comando em segundo plano (BG) e precisa deslogar da máquina, para ir embora, pra casa. Quando acessamos remotamente uma máquina Linux via ssh, ao desconectarmos, é emitido um sinal hangup (HUP) de que ocorreu um logout e os processos são encerrados.
Para evitarmos isso, usamos o comando NOHUP.
Exemplo:
nohup find / -name "*.xls" & - envia a execução do find para background (&) e descarta um sinal de hangup caso venha acontecer um logoff na máquina. O resultado da pesquisa será salvo em um arquivo chamado nohup.out dentro do diretório atual.

SCREEN

Cria múltiplos terminais virtuais. Quando acessamos um servidor remoto via ssh, se a nossa conexão cair, claro que nossa sessão vai fechar também. Com o comando screen esse problema acaba, pois mesmo que sua conexão caia, uma sessão virtual do jeito que você deixou estará a continuar a execução.

Outra coisa possível é criar várias sessões com uma só conexão ssh. Para isso, basta criar um novo screen da sessão atual e depois ficar alternando entre eles.

Comandos:
C-a  - equivale a tecla de atalho Ctrl+a
c - após ter pressionado o atalho C-a, aperte a tecla c para criar uma nova sessão
p - após o C-a, tecle a letra p para navegar para a sessão anterior, caso exista mais de uma.
n - após o C-a, tecle a letra n para ir para a próxima sessão, caso exista mais de uma.
d - após o C-a, tecle a letra d para encerrar a sessão SSH mas deixa o screen ativado para uma futura reconexão.

screen -ls ou screen -list - lista todas as sessões de screen.



Na figura acima, existem duas sessões: 3152 e 3071. A informação "Attached" e "Detached" significa que tem alguém conectado e desconectado, respectivamente.
Para reconectar, utilizamos a opção -r + nome_da_sessão. Exemplo:

screen -r 3152.pts-0.arch-machine

FREE E UPTIME

O comando free mostra a perfomance da memória, quanto está sendo usado, quanto está livre e quanto está sendo usado de swap. Com a opção -h deixamos a saída mais legível.




O comando uptime, mostra o consumo de recursos da máquina, bem como a quanto tempo ela está ligada.
O arquivo /var/run/utmp é consultado para verificar quem está utilizando o sistema e utiliza também o diretório /proc para saber como estão os processos.

uptime
 00:40:18 up  2:41,  2 users,  load average: 0,61, 0,58, 0,58

Os valores finais, load average, mostra uma média do consumo geral. Quanto mais estes números estiverem perto de 1.00, mais o sistema está sendo utilizado e que está com poucos recursos.




Comentários