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

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

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


From: Marcus Vinicius
Subject: Res: [shell-script] Trap do Bash ::: Abortar Comando
Date: Mon, 7 Jan 2008 11:24:56 -0800 (PST)

Olá Julio,

O sinal testei todos os sinais e quando o shell gera um processo filho sempre 
ocorre o mesmo problema, também testei com -15
Testei todos os sinais sem gerar processo filho (usando a dica enviada na 
lista, read -t) e desta forma sempre funciona.

A escolha do -USR1 ocorreu pois eu não penso em matar o script executado. 
O programa estará em execução constante no servidor como se fosse um daemon. 

Um segundo programa irá enviar sinais para ele e com base nestes sinais irá 
estabelecer uma comunicação usando fifo.


Fiz um debug com strace e segue os dois resultados ao receber um sinal -10:


Com sleep:
waitpid(-1, 0xbfd091d8, 0)              = ? ERESTARTSYS (To be restarted)
--- SIGUSR1 (User defined signal 1) @ 0 (0) ---
sigreturn()                             = ? (mask now [CHLD])
waitpid(-1,


com read -t:
0x80089040, 128)                = ? ERESTARTSYS (To be restarted)
--- SIGUSR1 (User defined signal 1) @ 0 (0) ---
rt_sigprocmask(SIG_BLOCK, [USR1], [USR1], 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [USR1], 8) = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xb7d6e000
write(1, "Execu\347\343o Interrompida\n", 22) = 22
rt_sigprocmask(SIG_SETMASK, [USR1], NULL, 8) = 0
sigreturn()                             = ? (mask now [])
read(0,


Obrigado pela ajuda!

--
Marcus Vinícius




----- Mensagem original ----
De: Julio C. Neves <address@hidden>
Para: address@hidden
Enviadas: Segunda-feira, 7 de Janeiro de 2008 17:13:29
Assunto: Re: [shell-script] Trap do Bash ::: Abortar Comando









  


    
            Fala Marcus,

nem todo sinal mata (o 19 p.ex. somente suspende o processo). Sobre os

sinais 10 e 12 (SIGUSR1 e SIGUSR2), eu só sei que os são usados para threads

e por isso pode ser que isto que vc constatou seja a sua característica, nem

sei pq vc o está utilizando.



O que te falei sobre o trap é verdade e funciona. Pq vc não o experimenta

com o sinal 15 que é o default do kill?



Abraços,

Julio



Em 07/01/08, Marcus Vinicius <marc_mcs10@yahoo. com.br> escreveu:

>

>   Olá Julio, Obrigado pela resposta.

>

> Testei com ( ' ) mas o sintoma permaneceu o mesmo.

>

> simplifiquei a linha do trap com um único comando que ao receber o sinal

> 10 deveria me enviar uma mensagem na tela..

>

> trap 'echo Execução Interrompida' 10

>

> while : ; do ## loop infinito

> sleep ${durma}

> echo Script em Execução, com sleep em ${durma}

> done

>

> Fix um debug com a opção "-x" e quando eu envio o sinal 10 no pid do pai e

> ele só mostra a mensagem quando o sleep atual termina.

> Neste teste não consegui simular na prática a diferência entre ( " ) e ( '

> ) no trap.

>

> Obrigado.

>

> --

> Marcus Vinícius

>

> ----- Mensagem original ----

> De: Julio C. Neves <julio.neves@ gmail.com <julio.neves% 40gmail.com> >

> Para: shell-script@ yahoogrupos. com.br <shell-script% 40yahoogrupos. com.br>

> Enviadas: Segunda-feira, 7 de Janeiro de 2008 15:57:50

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

>

> 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

>



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





    
  

    
    




<!--

#ygrp-mkp{
border:1px solid #d8d8d8;font-family:Arial;margin:14px 0px;padding:0px 14px;}
#ygrp-mkp hr{
border:1px solid #d8d8d8;}
#ygrp-mkp #hd{
color:#628c2a;font-size:85%;font-weight:bold;line-height:122%;margin:10px 0px;}
#ygrp-mkp #ads{
margin-bottom:10px;}
#ygrp-mkp .ad{
padding:0 0;}
#ygrp-mkp .ad a{
color:#0000ff;text-decoration:none;}
-->



<!--

#ygrp-sponsor #ygrp-lc{
font-family:Arial;}
#ygrp-sponsor #ygrp-lc #hd{
margin:10px 0px;font-weight:bold;font-size:78%;line-height:122%;}
#ygrp-sponsor #ygrp-lc .ad{
margin-bottom:10px;padding:0 0;}
-->



<!--

#ygrp-mlmsg {font-size:13px;font-family:arial, helvetica, clean, sans-serif;}
#ygrp-mlmsg table {font-size:inherit;font:100%;}
#ygrp-mlmsg select, input, textarea {font:99% arial, helvetica, clean, 
sans-serif;}
#ygrp-mlmsg pre, code {font:115% monospace;}
#ygrp-mlmsg * {line-height:1.22em;}
#ygrp-text{
font-family:Georgia;
}
#ygrp-text p{
margin:0 0 1em 0;}
#ygrp-tpmsgs{
font-family:Arial;
clear:both;}
#ygrp-vitnav{
padding-top:10px;font-family:Verdana;font-size:77%;margin:0;}
#ygrp-vitnav a{
padding:0 1px;}
#ygrp-actbar{
clear:both;margin:25px 0;white-space:nowrap;color:#666;text-align:right;}
#ygrp-actbar .left{
float:left;white-space:nowrap;}
.bld{font-weight:bold;}
#ygrp-grft{
font-family:Verdana;font-size:77%;padding:15px 0;}
#ygrp-ft{
font-family:verdana;font-size:77%;border-top:1px solid #666;
padding:5px 0;
}
#ygrp-mlmsg #logo{
padding-bottom:10px;}

#ygrp-vital{
background-color:#e0ecee;margin-bottom:20px;padding:2px 0 8px 8px;}
#ygrp-vital #vithd{
font-size:77%;font-family:Verdana;font-weight:bold;color:#333;text-transform:uppercase;}
#ygrp-vital ul{
padding:0;margin:2px 0;}
#ygrp-vital ul li{
list-style-type:none;clear:both;border:1px solid #e0ecee;
}
#ygrp-vital ul li .ct{
font-weight:bold;color:#ff7900;float:right;width:2em;text-align:right;padding-right:.5em;}
#ygrp-vital ul li .cat{
font-weight:bold;}
#ygrp-vital a{
text-decoration:none;}

#ygrp-vital a:hover{
text-decoration:underline;}

#ygrp-sponsor #hd{
color:#999;font-size:77%;}
#ygrp-sponsor #ov{
padding:6px 13px;background-color:#e0ecee;margin-bottom:20px;}
#ygrp-sponsor #ov ul{
padding:0 0 0 8px;margin:0;}
#ygrp-sponsor #ov li{
list-style-type:square;padding:6px 0;font-size:77%;}
#ygrp-sponsor #ov li a{
text-decoration:none;font-size:130%;}
#ygrp-sponsor #nc{
background-color:#eee;margin-bottom:20px;padding:0 8px;}
#ygrp-sponsor .ad{
padding:8px 0;}
#ygrp-sponsor .ad #hd1{
font-family:Arial;font-weight:bold;color:#628c2a;font-size:100%;line-height:122%;}
#ygrp-sponsor .ad a{
text-decoration:none;}
#ygrp-sponsor .ad a:hover{
text-decoration:underline;}
#ygrp-sponsor .ad p{
margin:0;}
o{font-size:0;}
.MsoNormal{
margin:0 0 0 0;}
#ygrp-text tt{
font-size:120%;}
blockquote{margin:0 0 0 4px;}
.replbq{margin:4;}
-->








      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]



reply via email to

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