shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Trap do Bash ::: Abortar Comando


From: Julio C. Neves
Subject: Re: [shell-script] Trap do Bash ::: Abortar Comando
Date: Mon, 7 Jan 2008 15:57:50 -0200

Fala Marcus,
o Shell lida com o trap em 2 momentos distintos: qdo ele o lê o coloca em
uma área de memória e qdo ele recebe o sinal e o executa.

O que vc quer deve ser resolvido nesta primeira fase. Se os cmds do trap
estiverem entre aspas ("), os cmds serão armazenados em memória já
resolvidos; caso os mesmos cmds estiverem entre plics ('), estes cmds só
serão resolvidos no momento que o sinal for recebido e assim sendo o PID
gerado será o do filho.

Assim sendo, o seu trap deveria ser:

trap 'echo -e "\e[31;1mExecução Interrompida. Saindo\e[m" ; echo $$: Sinal
Identificado >> /tmp/morte.txt' 10

Espero que a explicação esteja boa, pois no meu livro falo sobre isso, porém
não gosto da redação, pois acho que ninguém entende.

Abração,
Julio


Em 07/01/08, Marcus Vinicius <address@hidden> escreveu:
>
>   Pessoal, Boa tarde.
>
> Tenho o seguinte script que fiz para exemplificar a minha necessidade:
>
> #!/bin/bash
> durma=10
>
> trap "echo -e '\e[31;1mExecução Interrompida. Saindo\e[m' ; echo $$: Sinal
> Identificado >> /tmp/morte.txt" 10
>
> while : ; do ## loop infinito
> sleep ${durma}
> echo Script em Execução, com sleep em ${durma}
> sleep ${durma}
> done
>
> O meu problema é com o trap. Ao executar no console: "kill -USR1 PID" ele
> só identifica o sinal depois q o sleep termina.
> Se meu sleep estiver em 60, o trap só pega o sinal depois de 60 segundos.
>
> O que eu gostaria é que ao enviar um sinal, o script oborte o sleep e
> execute o trap.
> Percebam que o sleep é um processo filho. O kill está sendo mandado
> diretamente para o pid do script, pai.
>
> Ex:
> root 25457 12265 0 13:33 pts/0 00:00:00 /bin/bash /tmp/teste.sh
> root 25458 25457 0 13:33 pts/0 00:00:00 sleep 10
>
> Ao mandar kill no processo pai, ele não recebe na hora pois o filho sleep
> ainda não terminou.
> Minha versão de bash é 3.1.17
>
> Alguém sabe se é possível fazer oq preciso?
>
> Agradeço desde já.
>
> --
> Marcus Vinícius
>
> Abra sua conta no Yahoo! Mail, o único sem limite de espaço para
> armazenamento!
> http://br.mail.yahoo.com/
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Abraços,
Julio


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]