Enviado em 15/04/2012 - 15:34h
Existe uma forma melhor de fazer o teste se o próprio foi lançado em background ?
- Já tentei com jobs. Nada retorna. Nem mesmo passando o número do pid que está em ação.
- Já derrapei usando a variável $! que promete avisar se está rodando em background. Realmente ela até avisa, mas somente na área interativa. Dentro do script não consegui capturar.
Script foi cortado para não enviar pontos que não interessam.
Embora tenha feito várias pesquisas e li com atenção este artigo: http://www.vivaolinux.com.br/artigo/Processos-no-Linux?pagina=6 , não encontrei uma forma melhor de fazer o que pretendo. Da forma que fiz parece ser mais um POG. Se existe outra forma mais limpa de fazer este procedimento alguém me avisa ?
A chamada é feita assim:
$ ./gerador_de_tarefas.sh &
Tente outra vez.......
- Já tentei com jobs. Nada retorna. Nem mesmo passando o número do pid que está em ação.
- Já derrapei usando a variável $! que promete avisar se está rodando em background. Realmente ela até avisa, mas somente na área interativa. Dentro do script não consegui capturar.
Script foi cortado para não enviar pontos que não interessam.
#!/bin/bash
# file: gerador_de_tarefas.sh
# name: Gerador de tarefas para dataware
# Author: Ga_Tux aprendiz de Shell Script
# charset UTF-8
# endofline Linux
# since 2012-04-15 13:13 (GMT -03:00)
# license Não tenho a menor ideia.
# system GNU bash
# version: alfa 0.1
# more: Script vai tentar jogar 250 forks em background.
# objetives: Ficar monitorando a execução dos Scripts em background.
#-----------------------------------------------------------------------------#
#set -x # Liga Debug de tudo.
#trap read DEBUG # Debugando tudo.
# Quando rodar em background deve desabilitar o debug.
# Estratégia - Saber se estou trabalhando em background para inibir mensagens,
# DEBUG e outros malandros.
#-----------------------------------------------------------------------------#
MeuPid="$$" # Pegando meu pid atual.
MeuScript=$(basename "$0") # Pego o nome do meu script.
#-----------------------------------------------------------------------------#
# Ficou um pouco complexo por não saber fazer de outra forma.
# O comando ps mostra todos processos em andamento.
# Usando o número do pid localizo o script que está sendo executado.
# Para o resultado do ps uso fgrep pesquisar "S " porque em bg
# não fica com S+
# O sed vai montar o nome do job para confirmar.
#-----------------------------------------------------------------------------#
MeuJob=$(ps h -j $MeuPid | fgrep "S " | sed 's/.*\/// ; s/ .*//')
echo $MeuPid # Avisando o bestão o que vem por aqui.
echo $MeuJob # Outro aviso ao bestão.
if [ "${MeuScript}" == "${MeuJob}" ] ; then
echo "está dizendo que FOI iniciado em bg"
StartedProcessBG="1"
echo "Meu job $MeuJob " # Só para o bestão confirmar.
else
echo "Meu job $MeuJob " # Olha seu nó cego tá certo.
StartedProcessBG="0"
echo "está dizendo que está vazia. Não iniciado em bg "
fi
sleep 50
echo fim
exit 0
Embora tenha feito várias pesquisas e li com atenção este artigo: http://www.vivaolinux.com.br/artigo/Processos-no-Linux?pagina=6 , não encontrei uma forma melhor de fazer o que pretendo. Da forma que fiz parece ser mais um POG. Se existe outra forma mais limpa de fazer este procedimento alguém me avisa ?
A chamada é feita assim:
$ ./gerador_de_tarefas.sh &
Tente outra vez.......