Enviado em 11/05/2019 - 20:10h
Olá, estou tentando automatizar uma tarefa e estou encontrando problemas com o PID.for i in 5 10 do echo "omnetpp.ini Generated! Running." ../../bin/Castalia -c General PIDCAST=$(ps aux |grep CastaliaBin |tr -s " " | cut -d" " -f2) wait $PIDCAST cp Castalia-Trace.txt Castalia-Trace_$i.txt rm Castalia-Trace.txt rm omnetpp.ini done
omnetpp.ini Generated! Running. ./executa.sh: linha 88: wait: o pid 2573 não é um processo filho deste shell cp: não foi possível obter estado de 'Castalia-Trace.txt': Arquivo ou diretório inexistente rm: não foi possível remover 'Castalia-Trace.txt': Arquivo ou diretório inexistente
Enviado em 12/05/2019 - 02:52h
De fato, a forma tradicional de sistemas UNIX de lidar com processos somente permite que se chame wait sobre processos que são descendentes diretos daquele que vai fazer a espera.# Cria fifo. mkfifo /tmp/cast_fifo # Dentro de um subshell, cria um redirecionamento do descritor 3, tentando escrever no fifo. Se # ../../bin/Castalia e CastaliaBin não fecharem explicatamente esse descritor, ele vai permanecer # aberto até o final da execução. Note que o subshell é executado em background. ( exec ../../bin/Castalia -c General 3>/tmp/fifo ) & # No seu script, tentar ler do fifo. Essa leitura vai ficar parada até que nenhum processo do # subshell acima tenha mais o fifo aberto. Se ele não tiver sido explicitamente fechado no início # da execução do Castalia, isso só se dará quando todos os processos tiverem acabado. read dummy < /tmp/cast_fifo # Remove o fifo. rm /tmp/cast_fifo
../../bin/Castalia -c General # Tenta descobrir o PID do CastaliaBin cinco vezes. Se não conseguir, dá erro. for i in 1 2 3 4 5; do pid=`ps awx | grep -v grep | grep CastaliaBin | awk '{ print $1 }' | head -n 1` [ -n "$pid" ] && break sleep 1 done [ -z "$pid" ] && echo "Não foi possível descobrir PID." >&2 && exit 1 # Enquanto existir /proc/$pid, o processo ainda existe (a segunda condição, testada pela chamada # a readlink, é para ver se o programa pode já ter acabado, mas ainda estar como zumbi; se você # quiser, pode suprimir esse segundo teste). while [ -d "/proc/$pid" ] && readlink -q "/proc/$pid/cwd" >/dev/null; do sleep 1 done # Neste ponto, deve ser seguro mexer no arquivo de logs.
for i in 1 2 3 4 5; do pid=`ps awx | grep -v grep | grep CastaliaBin | awk '{ print $1 }' | head -n 1` [ -n "$pid" ] && break sleep 1 done [ -z "$pid" ] && echo "Não foi possível descobrir PID." >&2 && exit 1 # O sinal zero é neutro, e serve para saber se o processo existe (desde que nós tenhamos # permissão de enviar-lhe sinais). while kill -0 $pid 2>/dev/null; do sleep 1 done
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Minha rede tem um espaço invisível que não dá pra digitar o nome da re... (1)
Pedagogia no brasil não passa de alfabetização por m4sturbação mental ... (2)
compilação samba 4.22 rock linux 9.5 (3)
Erro de segmentação «Segmentation fault (core dumped)» ao retornar obj... (7)