Enviado em 15/04/2012 - 15:34h
Existe uma forma melhor de fazer o teste se o próprio foi lançado em background ?
#!/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