Planos de execução de processos e prioridades

Ainda falando sobre processos, é importante saber que podemos controlar as tarefas que são executadas no shell. Esse controle, nada mais é do que suspender a execução de um processo e continuar a executá-lo depois.

Nesse post, vou falar sobre planos de execução de processos e prioridades.

Planos de execução

Planos de execução, são os modos em que um processo pode ser executado: em background ou foreground. Na sua vida de administrador de sistemas, você irá ouvir muito sobre isso!

No post que falei sobre processos, coloquei as definições de background e foreground (vou reaproveitar para usar aqui…):

Background – processos em background estão rodando em segundo plano, ou seja, não tem interação com o usuário, não exibem a execução no monitor e não prendem o terminal (permitem que o usuário inicialize outros processos).

Foreground – processos em foreground estão rodando em primeiro plano, ou seja, o comando é executado e prende o terminal. Nada poderá ser feito no terminal até que o processo termine.

Imagine que você está na empresa e precisa copiar um diretório que tem arquivos grandes. Como isso vai levar um certo tempo e você não quer o terminal preso, pode colocar o comando para rodar em background.

Por exemplo:

# cp -R /dumps /backup &

E o comando para colocar em background é apenas o ‘&‘ no final do comando.

Outro exemplo; podemos atualizar a base de dados do comando locate com um simples updatedb. Mas, dependendo de quanto tempo faz que você não executa esse comando, isso pode levar um tempo; daí, é interessante deixar esse comando rodando em background:

# updatedb &

Quando o shell inicializa um processo em background, nós temos uma linha similar a esta:

# updatedb &
[1] 2984

Essa linha, indica o número do job (entre colchetes) e o número do PID do processo. E para visualizar os processos que estão rodando em backgrond, utilizamos o comando jobs:

# jobs

Agora… vamos ver um outro exemplo. Imagine a seguinte situação: você iniciou o VI em background e precisa traze-lo para foreground (primeiro plano), fazer alguns ajustes e depois voltar o para background novamente.

Xi… confuso, né? Vamos por partes, como faria Jack:

1) Iniciar o processo em background:

# vi &
[1] 2020

Bem, iniciamos o processo em background! Temos o número do job [1]e o PID do processo 2020. Dessa forma, o terminal fica livre! Agora, vamos para o próximo passo, que é trazer o processo para o primeiro plano!

2) Trazer o processo para foreground. Aqui, temos que ter o número do jobs… Se não lembrar o número, executa o comando jobs:

# jobs
[1]+  Stopped                 vi

Temos o número do jobs! O status do processo é Stopped porque o vi é um processo interativo… não vai fazer nada se estiver em background😉 !

Vamos trazer o processo para foreground; para isso utilizamos o comando fg:

# fg 1

Com isso, o VI irá abrir, e você poderá fazer os ajustes no arquivo.

3) Feito os ajustes no arquivo, é hora de colocar o processo para rodar em background novamente. Mas ai vem a pergunta: “Como colocar o processo em background sem parar o processo?”

Para isso, temos que primeiro colocar o processo para dormir com o comando CTRL+Z, que é o equivalente ao sinal SIGSTOP (-19); como estamos com o VI aberto; basta teclar CTRL+Z:

^Z

E ai, receberemos uma linha como abaixo:

[1]+  Stopped                 vi

4) Com o processo parado, podemos colocá-lo para rodar em background novamente; mas agora, não vamos usar o ‘&’ pois este só serve para iniciar um processo em background…
O comando que coloca em background um processo já iniciado é o bg:

# bg 1
[1]+ vi &

Pronto! Já temos o VI rodando em background novamente!

Para encerrar o processo, basta trazer o VI para foreground novamente e teclar ESC+ :q para sair!

Ahn, só lembrando, os comandos jobs, fg e bg são comandos internos do shell! Então, para saber mais sobre eles, basta fazer:

# man bash

Prioridade de processos

A prioridade de um processo, seria a gentileza (nice) que o kernel terá com um processo, reservando tempo de CPU e memória, sendo que, por padrão, cada processo iniciado possui uma prioridade.

Quando configuramos uma prioridade, estamos falando para o kernel tratar determinado processo com gentileza (prioridade alta) ou simplesmente nem tanta gentileza assim (prioridade baixa).

A prioridade padrão de um processo é 10 (equivale a 0 (zero)); e os comandos que utilizamos para controlar a prioridade são o nice e renice.

O comando nice é utilizado quando vamos iniciar um processo com uma determinada prioridade.

Já o comando renice, é usado quando vamos mudar a prioridade de um processo que já está rodando.

Números negativos, indicam alta prioridade, enquanto números positivos indicam prioridade baixa.
Vejam:

Tabela prioridade de processos

No exemplo, vamos iniciar um processo com prioridade alta:

# nice -n -15 find / -iname share

No comando acima, estamos pedindo para localizar arquivos ou diretórios com a palavra share, com prioridade -15.

A opção -n é utilizada pelo comando nice para ajustar a prioridade!

Para ver a prioridade, podemos ir em outro terminal e digitar:

# ps -lax
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4     0  2146  2093   4 -15   2832   756 sync_b D<+  pts/0      0:02 find / -iname share

Onde a opção -l do comando ps é para listar em formato longo, ou seja, todas as informações; o comando, conforme colocado acima, não utiliza a opção u (a opção de listar os processos dos usuários).
E a gentileza que pedimos para o kernel tratar do processo, está na coluna NI.

Agora, para mudar a prioridade de um processo que está em execução, temos que ter o PID do processo. Por exemplo, vamos alterar a prioridade do processo cron:

# pgrep cron
2243

Com o PID em mãos, vamos alterar a prioridade do processo:

# renice -5 -p 2243
2243: old priority 0, new priority -5

Acima, ele mostra o processo, a prioridade antiga, 0, que é a prioridade padrão, e a nova prioridade que definimos!

É isso ai, pessoas… espero que esse post seja útil e ate a próxima!🙂

0 Responses to “Planos de execução de processos e prioridades”



  1. Deixe um comentário

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s




Follow Nix on WordPress.com
janeiro 2009
S T Q Q S S D
« dez   mar »
 1234
567891011
12131415161718
19202122232425
262728293031  

Flickr Photos

Morning Silence

Mais fotos

%d blogueiros gostam disto: