Curso de Linux Básico – Parte 8
Hoje vamos aprender a gerenciar processos. Iniciar, finalizar e controlar o funcionamento de programas no sistema Linux.
Todos os programas rodando em um sistema Linux são processos. Os comandos, os serviços, e os programas. Esses processos recebem uma identificação ao serem inicializados, e podem ser finalizados caso executem alguma operação irregular.
Para sabermos quais são os números dos processos executados no momento utilizamos o comando “ps”.
ps
Sintaxe
# ps [options]
Exemplo:
# ps -e (a opção -e exibe os processos no modo mais simples)
PID TTY TIME CMD
1? 00:00:01 init
2? 00:00:01 ksoftirqd/0
3? 00:00:00 events/0
4? 00:00:00 khelper
5? 00:00:00 kthread
…
17301 ? 00:00:15 smbd
21893 ? 00:00:01 smbd
21928 ? 00:00:01 smbd
22986 ? 00:00:09 smbd
25926 ? 00:00:00 sshd
25933 pts/1 00:00:00 bash
27305 pts/1 00:00:00 xterm
27353 pts/2 00:00:02 kwrite
Vemos aqui que existe um processo chamado “init”. O init será sempre o primeiro processo e será sempre o de PID 1. PID é a identificação do processo (Process Identifier).
Caso você queira terminar o processo, ou finalizá-lo, podemos mandar uma série diferente de instruções de finalização, desde uma instrução para reiniciar o processo até uma instrução para tirar o processo da memória do sistema. Alguns dos tipos de finalização de processos mais conhecidos são:
- HUP ou 1 – Termina ou reinicia o processo
- TERM ou 15 – Finaliza o processo
- KILL ou 9 – Força a finalização do processo
Estado dos processos
Em certos momentos os processos no Linux podem estar em situações de execução diferentes. O Linux trabalha com quatro tipos de estados:
Executável: o processo pode ser executado imediatamente;
Dormente: o processo precisa aguardar alguma coisa para ser executado. Só depois ele passa para o estado executável;
Zumbi: o processo é considerado “morto”, mas, por alguma razão, ainda existe;
Parado: o processo está “congelado”, ou seja, não pode ser executado.
Comandos nice e renice
Um processo pode ter prioridade em relação a outros em sua execução. Um processo “legal”, oferece a gentileza de permitir que um processo com prioridade maior que a sua seja executado antes dele. Quanto mais alto for o valor nice, mais “legal” é o processo. O intervalo de números usados no nice são os inteiros entre -19 e 19.
Para determinar a prioridade de um processo, utiliza-se um comando nice.
Sintaxe:
# nice -n prioridade processo
Por exemplo:
# nice -n -5 httpd
No exemplo, o httpd recebe prioridade -5.
Para alterar a prioridade de um processo em execução utilizamos o comando renice.
Sintaxe:
# renice prioridade opção processo/destino
As opções do renice são:
-u - a alteração ocorrerá nos processos do usuário informado;
-g – a alteração ocorrerá nos processos do grupo indicado;
-p – a alteração ocorrerá no processo cujo PID for informado.
Um exemplo:
# renice +19 1550 -u infowester
Aqui, o comando renice alterou a prioridade do processo 1550 e de todos os processos do usuário vidalinux.
kill, killall
Vamos imaginar que o processo do programa kwrite travou. Para finalizarmos este processo usaremos o comando kill ou killall.
Sintaxe:
# kill [-s SIGNAL | -SIGNAL] PID
# killall [opções] name
Exemplos:
# kill 27353 (assim finalizamos o processo)
# kill -9 27353 (o -9 é utilizado para finalizarmos processos travados)
# killall kwrite (finalizando o processo pelo nome. Assim finalizamos TODOS os kwrite´s)
top
Existe um outro programa que pode ajudar no gerenciamento de processos no Linux, é o top. Ele é uma ferramenta que exibe algumas informações adicionais como uso de CPU e memória, além de podermos visualizar em tempo real quais programas estão exigindo mais do nosso sistema.
# top
top – 09:20:04 up 11 days, 1:08, 2 users, load average: 0.82, 1.12, 1.30
Tasks: 137 total, 1 running, 136 sleeping, 0 stopped, 0 zombie
Cpu(s): 20.3%us, 1.7%sy, 0.0%ni, 73.3%id, 3.7%wa, 0.3%hi, 0.7%si, 0.0%st
Mem: 449732k total, 443828k used, 5904k free, 3648k buffers
Swap: 1309256k total, 245416k used, 1063840k free, 146396k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9655 emarte 15 0 378m 172m 24m S 16.6 39.2 1430:36 firefox-bin
9163 root 15 0 147m 52m 3712 S 3.3 11.9 123:08.10 Xorg
28385 root 16 0 4900 2088 1592 S 2.3 0.5 0:16.66 ssh
9346 emarte 15 0 38224 12m 6832 S 0.3 2.8 0:35.19 konsole
Com o top você também pode finalizar tarefas, basta digitar a letra “k”, ele irá solicitar o PID do processo e qual tipo de finalização você deseja.
Processos em segundo plano
Quando estamos num terminal, queremos utilizar algum comando/aplicação e necessitamos ainda do terminal livre, podemos executar o que queremos em segundo plano. É muito simples, veja:
# comando &
Simplesmente adicione o caracter & ao final do comando/aplicativo que você quer executar. Acho interessante quando estamos no X e queremos abrir uma aplicação diretamente do terminal. Veja:
# kcalc &
#
Executou o kcalc (calculadora) e o shell continuou livre. Veja outro exemplo em que rodei uma aplicação e o shell ficou ocupado, então, mesmo depois disso, há como fazê-lo ficar em background (segundo plano), veja:
$ su -c xcdroast
passwd:
Depois de ter fornecido a senha, ele ficou ali, estático, e o xcdroast permaneceu aberto. Como eu queria ter o shell livre, utilizei (no bash):
Ctrl + z
[1]+ Stopped su -c xcdroast
Então, ele volta ao shell, e aqui eu forneço o comando:
# bg
[1]+ su -c xcdroast &
O programa continua executado e o shell livre. Caso eu queria voltar o programa para foreground, é só utilizar o comando:
# fg
su -c xcdroast
E o shell fica novamente ocupado. Podemos fazer também o X iniciar em segundo plano (caso você utilize inicialização em modo texto e use o comando `startx’ para entrar em modo gráfico), veja:
# startx 2>&1 > /dev/null &
Você pode adicionar também essas informações ao arquivo /etc/profile, como um alias:
alias startx=”startx 2>&1 > /dev/null &”
Bom pessoal, espero que tenha ajudado vocês a entender como funciona o gerenciamento de processos no Linux.
Índice de Curso de Linux Básico
- Curso de Linux Básico – Parte 1
- Curso de Linux Básico – Parte 2
- Curso de Linux Básico – Parte 3
- Curso de Linux Básico – Parte 4
- Curso de Linux Básico – Parte 5
- Curso de Linux Básico – Parte 6
- Curso de Linux Básico – Parte 7
- Curso de Linux Básico – Parte 8
- Curso de Linux Básico – Parte 9
- Curso de Linux Básico – Parte 10
