Por dentro do JOB em Linux

Posted on jun 10, 2008 under Dicas Linux, Sem categoria |

Jobs em linux estão relacionados as tarefas que são executadas no sistema operacional, mas como ter controle sobre eles ?

Linux é um sistema operacional multitarefa diferente do nosso antigo conhecido MS-DOS. O linux roda mais que um processo por vez, de fato se pensarmos um pouco, o primeiro programa a ser executado é o init, sendo o pai de todos os processos futuros. Este conceito pode ser visualizado através do comando pstree, veja uma parte do resultado:

init-+-acpid
     |-5*[agetty]
     |-cron
     |-2*[dbus-daemon]
     |-dbus-launch
     |-2*[dhcpcd]
     |-hald—hald-runner-+-hald-addon-cpuf
     |                    |-hald-addon-inpu
     |                    `-hald-addon-stor
     .
     .
     .

Mas ser multitarefa não significa somente que podemos rodar vários serviços ao mesmo tempo, tornar o shell mais interativo também é um recurso da multitarefa. Então quando uma tarefa leva muito tempo para executar como, por exemplo baixar um dvd de alguma distribuição linux com o comando wget, podemos colocar esse processo em background (segundo plano) e continuar usando o shell. Conhecendo o controle de Jobs em linux podemos aproveitar melhor os recursos disponibilizados pelo sistema operacional.

Alguns Recursos Interessantes

Quero executar um lista de comandos separados por ; em background. Todo mundo sabe que basta colocar o & no final da linha

$ sleep 20; wc -l &

Acontece que primeiro será executado o sleep 20 depois que ele terminar retorna o shell. Então para resolver este pequeno problema basta colocar os comandos entre parênteses


$ (sleep 20; wc -l) &

Outro recurso muito legal, por exemplo estamos fazendo um script utilizando o vim, então tenho que fazer a seguinte seqüência - editar o arquivo, testar o funcionamento do script, editar novamente.
Normalmente utilizo da seguinte forma salvo o arquivo fecho o vim, executo o arquivo , abro novamente o vim. E assim sucessivamente.

Após entender melhor os recursos para controlar os job, utilizo da seguinte forma:

$ vim teste.sh
     ... Editar o arquivo,
     ... Pressione ESC :w para entrar no modo comando e :w para salvar
     CTRL+z
$ ./teste.sh
     ... Executa o arquivo
$ fg
     ...Edita o arquivo novamente
     ... Pressione ESC :w para entrar no modo comando e :w para salvar
     CTRL+z
$ ./teste.sh

Explicando:

Pressionando CTRL+z o processo é parado e enviado para background, podemos visualizar os processos em background com o comando jobs ele mostrará o seguinte resultado:

marlon@localhost ~ $ jobs
[1]+  Stopped                 vim teste.sh

Com o comando fg o processo é colocado em foreground(primeiro plano) e executado novamente.

O vim possui o recurso de auto salvar que pode ser habilitado com o comando :set autowrite dentro do vim. Esse comando pode ser colocado dentro do .vimrc. Então quando pressionamos ESC CTRL+z o vim salva o arquivo e vai para background.

Resumo de comandos para controle de jobs:

command & - Envia um processo para background
CTRL+c - Mata o processo com sinal INTR signal.
CTRL+z - Suspende a execução do processo com o sinal TSTP signal.
bg %num - Coloca um processo em background (%num - número do job)
fg %num - Coloca um processo em foreground
jobs - Lista os processos em background
set notify - Mostra quando mudar o estado de um job
stty tostop - Para os processos em background se estiverem tentado escrever no tela.


Livro Comandos do Linux: Guia de Consulta Rápida

Valeu pessoal, até mais.
Assinem o feed e recebam por email os novos matérias do blog.

Leave a Reply