Vou iniciar o artigo apresentando alguns dos principais comandos para controle de processos do
Linux, tais como: ps, kill, fg e bg. Também serão mostrados alguns exemplos de uso dos comandos.
Conceitos e Sinais de Processos
O primeiro processo do sistema é o:
init, ID == 1.
Processo: todo programa, aplicativo que você inicia, todos os scripts que são executados são processos dentro do Linux.
PID: é o Process ID, o número de identificação que cada processo recebe. O único PID fixo existente é o PID do processo INIT, que é o de número 1.
NICE NUMBERS: é o número de prioridade de execução de um processo. Se um processo é executado com maior prioridade, ele usa os melhores recursos de processamento para sua execução, enquanto se for prioridade baixa, ele depende que outros processos que não estejam utilizando estes recursos para que ele também possa fazer uso. Os NICE NUMBERS vão de -20 até 19, sendo a maior a prioridade negativa.
Sinais de Processos
Para saber o que se pode fazer com cada processo que está em execução, é preciso entender os sinais de processos.
Os mais importantes são:
1 - HUP ou SIGHUP: instrui o serviço a reler o seu arquivo de configuração (operação de reload).
2 - INT ou SIGINT: interrompe um processo em primeiro plano (é o mesmo que
Ctrl+c).
9 - KILL ou SIGKILL: interrompe bruscamente um processo. Este sinal deve ser utilizado em último caso, pois ele pode causar danos aos arquivos envolvidos no processo.
12 - USR2 ou SIGUSR2: interrompe processo do usuário fazendo logoff no mesmo.
15 - TERM ou SIGTERM: é enviado para todos os processos do sistema assim que ele entra em desligamento. Este sinal fecha todos os arquivos abertos do processo antes de terminá-lo, não causando nenhum tipo de dano a eles. Este é o sinal padrão da maioria dos comandos e programas que terminam processos justamente pela sua elegância.
18 - CONT ou SIGCONT: continua processos que foram parados pelo sinal 20, enviando-os para background.
20 - TSTP ou SIGTSTP: interrompe processos de forma que eles possam ser reiniciados depois pelo sinal 18. É o mesmo que a combinação de teclas
Ctrl+z.
Comandos Básicos de Controle de Processos
#& - coloca o processo em background, passando primeiro o comando e depois o &.
Colocando o processo com "&" no final, ele já inicia em background:
gnome-calculator &
[2] 2594
Ctrl+z - interrompe o processo e coloca em background:
jobs -l
[3]+ 9064 Stopped gnome-calculator
bg - coloca o processo em background:
[3]+ gnome-calculator &
# bg - envia um processo parado com sinal 20 (
Ctrl+z) para background.
firefox & - executando em background:
[1] 2477
bg 2 - especifica qual processo você que em background.
# fg - coloca o processo rodando em foreground, fica preso ao terminal, primeiro plano.
# jobs - mostra os processos que estão rodando em background.
jobs -l - mostra o PID dos processos, status e o nome dele.
# kill - envia sinais para um processo.
Outro detalhe importante, é que o sinal padrão do comando kill é 15, pois é o sinal mais aconselhável para terminar uma tarefa, ou seja, terminar um processo com o comando kill sem especificar qualquer argumento, leva-o a terminar o processo com o sinal 15.
kill -l - mostra todos os tipos de sinais que podem ser enviados para o comando kill.
ps aux | grep firefox - ver o PID do Firefox.
pgrep firefox - mostra o PID do Firefox.
4441
kill 4441 - mata o processo de forma "suave".
kill -s SIGKILL 4500 - envia um sinal para forçar o término do processo.
kill -s 9 4557 - mata o processo.
kill -9 4557 - mata o processo.
kill -SIGKILL 4557 - mata o processo.
Terminando o processo de PID 913 com o sinal 15(TERM):
kill -15 913
Ou:
kill TERM 913
Ou:
kill 913
Comandos para Tratar as Prioridades de Processos
# nice - executa um processo com prioridade específica.
nice -n 15 firefox & - definindo prioridade de valor 15 para o Firefox.
Ou:
nice -15 firefox &
nice -n -15 gnome-calculator & - definindo mais prioridade para o processo Firefox, somente root.
Ou:
nice --15 firefox gnome-calculator - omitindo o "-n" que serve também para prioridade negativa.
ps -la | grep 16007 - mostra o processo do Firefox e o número nice.
0 S 0 16007 8037 0 95 15 - 200066 SyS_po pts/1 00:00:00 gnome-calculato
nice --adjustment=10 - outra forma de definir processo como comando nice.
Dicas:
- Valores podem ser definidos entre -20 (valores negativos mais prioridade) a +19 (valores positivos menos prioridade).
- Todo processo começa com prioridade 0.
- A prioridade padrão do comando nice é 10 quando nada é setado.
- Somente o root pode dar prioridades negativas entre -19 e -1 a processos.
- Usuários não privilegiados podem iniciar os processos com prioridades de 0 a 19.
Exemplos: clonando o disco
/dev/sda em
/dev/sdb, com prioridade -15:
nice --15 dd if=/dev/sda of=/dev/sdb
Fazendo backup compactado do diretório
/home com prioridade 2:
nice -2 tar cjvf /root/backup_users.tar.bz2 /home
# ps - a ser descrito posteriormente.
# renice - altera a prioridade de um processo que está em execução.
ps -la | grep calcu
0 S 0 16007 8037 0 95 15 - 200066 SyS_po pts/1 00:00:00 gnome-calculato
renice -n 8 16007
16007 (process ID) com prioridade antiga 15, prioridade nova 8
Ou:
renice 8 16007 - alterando prioridade positiva para o processo.
renice -n -8 16007
Ou:
renice -8 16007 - alterando a prioridade negativa para o processo.
renice -u lpi1 -n 5 - altera a prioridade de todos os processos do usuário lpi1 para o valor 5.
renice -g lpi1 -n 5 - alterando o grupo do processo.
Mudando a prioridade do processo de PID 1811 para -16:
renice -16 1811
Mudando para 4 a prioridade do processo de PID 1902:
renice 4 1902
Mudando a prioridade de todos os processos do usuário operador para -17:
renice -17 u operador
# top - números que mostram o nice e renice do comando top.
- NI e PR - prioridade do processo naquele momento.
- NI - alterado por dois comandos, nice e renice.