Artigos

Prompt do Linux: Gerenciamento de Processos

No terceiro artigo da série “Prompt do Linux”, falaremos hoje sobre gerenciamento de processos no Linux. Os pontos básicos são: visualizando os processos em execução, alterando prioridades e enviando sinais aos processos. Vamos lá?

Visualizando processos em execução

Citando meu professor de Sistemas Operacionais, “processo é um programa em execução”. Tanto no Linux como em qualquer outro sistema operacional multitarefa, vários processos podem estar em execução. As ferramentas básicas para visualizá-los são o ps e o top.

Por padrão, o ps lista todos processos em execução pelo usuário e em seu terminal, no ato da digitação do comando. Passando-se os parâmetros certos, pode-se consultar os processos de sistema e os dos outros usuários. Olhe o exemplo abaixo:

daniel@ironman:~$ ps
PID TTY TIME CMD
2910 pts/0 00:00:00 bash
2941 pts/0 00:00:00 ps
daniel@ironman:~$

Veja que eu executei o comando com meu usuário (daniel), que é um usuário padrão (não-root), e sem parâmetros, o que me retornou os processos que eu estava rodando – apenas o bash (interpretador de comandos) e o próprio ps (campo CMD). Um campo muito importante é o PID (Process Identifier), que é um número único que identifica o processo. Para executar certas operações, como alterar prioridades ou encerrar processos, deve-se saber este número. O outro campo (TTY) diz em qual terminal o programa foi executado – no caso, um terminal remoto (eu estava conectado via SSH). E o campo TIME retorna o total do tempo que o processo já ocupou do processador.

Alguns parâmetros úteis e muito usados são: a (lista todos os processos associados a um terminal, independente do usuário), u (mostra o usuário que é proprietário do processo) e x (lista inclusive processos sem terminal associado). Ou seja, quando você vê alguém digitando ps aux, não é correto ler isto como “pê-ésse aux”, e sim como “pê-ésse a-u-x”, pois embora juntos, os três são parâmetros diferentes. Um pouco de cultura inútil não faz mal a ninguém =)

Com o comando acima, muito mais colunas são mostradas – no caso:
USER – Proprietário
%CPU – Porcentagem de CPU em uso
%MEM – Porcentagem de memória em uso
VSZ – Tamanho do programa em memória
STAT – Status do processo (ver o manual do ps, seção “Process State Codes” para uma descrição completa)
START – Hora de início da execução

Outro comando legal para visualizar processos é o top. Ele mostra as informações de processos e as atualiza num tempo pré-definido (geralmente 5 segundos), e também mostra outras informações, permitindo um acompanhamento mais detalhado do sistema. Eu o uso muito nos servidores aqui do serviço, para ter um overview de quanto a máquina está sendo utilizada. Para sair dele, basta pressionar q.

Prioridade de execução

O Linux usa um conceito bem diferente, e talvez um tanto excêntrico, para definir prioridades de execução de processos. Usa-se o conceito de nice (“gentil”, numa das traduções possíveis), onde um processo pode ir do menos “gentil” (-19), onde ele passa a ter a maior prioridade, até ao mais “gentil” (+19), onde ele passa a ter a menor prioridade. Um processo com nice zero, digamos, é mais ou menos “gentil”.

Para executar um comando com um nível de nice específico, basta digitar nice -n nível programa, como em nice -n 5 ls /home, onde o comando ls será executado com nice cinco. Somente o root pode executar processos com nice menor que zero.

Para consultar o nível de nice dos processos, use a opção l do ps, e consulte a coluna NI. Mas lembre-se que você não pode usá-la em conjunto com a opção u.

Para alterar a prioridade de um processo já rodando, deve-se usar o comando renice, com a sintaxe renice nível -p PID, como em renice -4 -p 1257, onde o processo com PID 1257 passará a ter um nice de menos quatro.

Enviando sinais aos processos

Conceito não usado no Windows (pelo menos até onde eu conheço), os processos do Linux podem receber sinais (signals) para realizarem algo. Por exemplo, o sinal HUP geralmente faz com que eles releiam seus arquivos de configuração, o que pode ser muito útil. Também há o sinal TERM, que orienta o processo a finalizar sua execução, o KILL, que encerra instantaneamente o dito cujo, e vários outros. Saber estes conceitos pode ser útil caso a interface gráfica venha a falhar (o que, no meu caso, infelizmente não tem sido raro…).

Para enviar sinais a um processo, use o comando kill (apesar do nome, ele não serve só pra matar =). Você precisa saber o PID do processo que receberá o sinal. Em seguida, basta digitar kill -sinal PID. Exemplos:

kill -TERM 1257 – Orienta o processo com PID 1257 a finalizar sua execução.
kill -HUP 3489 – Orienta o processo com PID 3489 a reler seu arquivo de configuração.
kill -KILL 7831 – Finaliza imediatamente o processo com PID 7831.

Os sinais também podem ser representados por números. O TERM pode ser representado pelo número 15; o HUP, pelo número 1; e o KILL, pelo número 9.

Todos os comandos citados têm mais opções, algumas talvez bem interessantes; se você souber de uma legal, ou quiser comentar algo a respeito deste artigo, use a seção de comentários abaixo. Have fun!

Tags: Linux

Você também vai gostar

Leia também!