sexta-feira, setembro 07, 2007

Criando e matando um processo em background

Suponha que vc tenha um script que execute um programa e deixa-o em background, o que é muito comum quando se quer deixar um processo rodando eternamente em um servidor.

Para executar o programa, crie um arquivo texto assim:

1 meu_programa &
2 echo "$!" > pid.txt;
Bom, a primeira linha executa o programa chamado "meu_programa" e libera o terminal, indicado pelo caracter "&". Sem esse símbolo, assim que vc fechar o terminal (ou ssh) o processo também morrerá.

A segunda linha é mais interessante: o comando echo irá criar um arquivo chamado "pid.txt" e colocará dentro dele o pid do último processo que foi para o background. Isso é indicado pelos sinais "$!". Assim, temos armazenado qual o pid do processo que executamos na linha 1.

Bom, agora basta criar um segundo script, que irá matar aquele processo específico, caso esteja rodando. Abra um novo arquivo em um editor de texto e ponha isso:
1 if [ -f pid.txt ]; then
2 echo Matando processo com PID $(cat pid.txt)...
3 kill $(cat pid.txt)
4 rm pid.txt
5 fi
A linha 1 verifica se o arquivo "pid.txt" existe. Caso isso ocorra, significa que o processo deve estar rodando. O comando "$(cat pid.txt)" irá ler o conteúdo do arquivo, pelo comando cat. O resultado, que é o número do processo, é enviado para o "comando de fora", o kill, que irá encerrar o processo. Por fim, o rm apaga o arquivo, já que o processo foi encerrado.

É isso.

Um comentário:

  1. Drasticamente, um killall resolveria o problema e mataria algumas coisinhas a mais.

    ResponderExcluir