Re: [ssfr] Finalement, ca concerne bien le shell...

[ Thread Index | Date Index | More debianworld.org/shellscript-fr Archives ]


Stephane Billiart a écrit :
On 10/07/08 ? ? 20:34, Philippe Jacquot wrote:
Philippe Jacquot a écrit :
Hello

Je reviens mon problème lié à Perl. En fait, j'avais fait un signal handler qui intercepte SIGINT et lance la routine correspondante, en l'occurance afficher la liste des noeuds non parcourus lors de la découverte d'un arbre.
Je le lançais comme ça:
$ ./fb_explore.pl | tee Resultat.log
Quand je [ctrl+c], aucun affichage ne se produisait.

Je viens par hasard de lancer ma commande *sans le pipe*, et là, ça fonctionne. Du coup, je me demande qui prend le [ctrl+c ] au final, est-ce qu'il est répercuté sur les membres du pipe, qui le reçoit en premier ? Si c'est le "tail", est-ce qu'il envoit un SIGINT ou un autre SIGxxx aux membres précédents, ... ?

(c'est pour construire un arbre d'amis d'amis d'amis... sur facebook, si ça intéresse quelqu'un...)


Merci de m'éclairer de vos lumières.  =)
Philippe

---
C'est à s'arracher les cheveux...
En fait, le handler est bien exécuté, puisqu'il m'affiche ma ligne de log. Mais c'est tout ce qu'il fait. Il n'exécute pas le reste des commandes. Du coup, je ne sais pas si c'est un problème relevant de bash ou de perl, étant donné que le programme fonctionne sans le pipe.
Je vais essayer sur la liste perl. Désolé pour le dérangement.  :)

Probleme interessant, j'ai essaye de reproduire avec ce script.

#!/bin/sh

stop() {
        echo "arret stderr" 1>&2
        echo "arret stdout"
        exit
}
trap 'stop' 2
echo debut
sleep 5
echo fin




A l'execution avec Ctrl-C, sans pipe puis avec
wallach:~ sh test.sh
debut
arret stderr
arret stdout
arret stderr
wallach:~ sh test.sh | tee r.log ; echo "LOG " ; cat r.log
debut
arret stderr
LOG debut

Ma theorie est que le ctrl-C est envoye a tous les processus et que tee
a donc ferme le stdout du script.
Je comprends pas par contre pourquoi, si je met un 2e 'arret stderr'
apres le stdout, il ne s'affiche pas, question de timing je suppose...

En regardant un peu les man, j'ai vu l'option qui change tout...
wallach:~ sh test.sh 2>&1 | tee -i r.log ; echo "LOG " ; cat r.log
debut
arret stderr
arret stdout
LOG debut
arret stderr
arret stdout

En ignorant les signaux au niveau du tee, on a tous les messages.

J'espere avoir fait avancer le schmilblick.

Arf. Je ne cherchais pas de ce coté. Je m'attendais à trouver une page succinte avec -h et -a. Pour qu'ils aient prévu cette option, c'est que mon problème doit survenir plus souvent qu'à l'accoutumée. :) Merci d'avoir cherché. En attendant j'ai fait ça dans le perl, et ça tourne depuis 1/2h. :)

P.

---


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/