Por dentro do JOB em Linux
Posted on jun 10, 2008 under Dicas Linux, Sem categoria | No CommentJobs 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.
