Bonjour,
[Systeme linux]
j'ai un script bash pere qui lance des scripts bash fils
Ces fils doivent afficher des retours a l'ecran.
Ils n'affichent pas ce que je veux lorsque je leur envoie un signal.
[...]
1. pourquoi le fils ne meurt pas lors du INT?
2. comment faire pour que le fils affiche sur la console sa
mort?
Bonjour,
[Systeme linux]
j'ai un script bash pere qui lance des scripts bash fils
Ces fils doivent afficher des retours a l'ecran.
Ils n'affichent pas ce que je veux lorsque je leur envoie un signal.
[...]
1. pourquoi le fils ne meurt pas lors du INT?
2. comment faire pour que le fils affiche sur la console sa
mort?
Bonjour,
[Systeme linux]
j'ai un script bash pere qui lance des scripts bash fils
Ces fils doivent afficher des retours a l'ecran.
Ils n'affichent pas ce que je veux lorsque je leur envoie un signal.
[...]
1. pourquoi le fils ne meurt pas lors du INT?
2. comment faire pour que le fils affiche sur la console sa
mort?
writes:1. pourquoi le fils ne meurt pas lors du INT?
Le fils meurt (ps axf),
2. comment faire pour que le fils affiche sur la console sa
mort?
Je conseillerais d'utiliser un vrai langage de programmation:
[ tmp]$ ./pere.lisp
Le père: Je suis le père
Le fils: Je suis le fils, PID = 5661
Exiting on signal 15
aheummm...
octane@alinto.com writes:
1. pourquoi le fils ne meurt pas lors du INT?
Le fils meurt (ps axf),
2. comment faire pour que le fils affiche sur la console sa
mort?
Je conseillerais d'utiliser un vrai langage de programmation:
[pjb@thalassa tmp]$ ./pere.lisp
Le père: Je suis le père
Le fils: Je suis le fils, PID = 5661
Exiting on signal 15
aheummm...
writes:1. pourquoi le fils ne meurt pas lors du INT?
Le fils meurt (ps axf),
2. comment faire pour que le fils affiche sur la console sa
mort?
Je conseillerais d'utiliser un vrai langage de programmation:
[ tmp]$ ./pere.lisp
Le père: Je suis le père
Le fils: Je suis le fils, PID = 5661
Exiting on signal 15
aheummm...
Le 03-01-2006, Pascal Bourguignon a écrit :writes:1. pourquoi le fils ne meurt pas lors du INT?
peut etre par ce que les process asynchrone qui n'ont pas le job control
(et/ou ne sont pas/plus en foreground) ne traitent pas SIGINT, un trap -p
INT derriere le trap mort INT devrait te confirmer que rien n'est
positionné dans le fils.
Le 03-01-2006, Pascal Bourguignon <spam@mouse-potato.com> a écrit :
octane@alinto.com writes:
1. pourquoi le fils ne meurt pas lors du INT?
peut etre par ce que les process asynchrone qui n'ont pas le job control
(et/ou ne sont pas/plus en foreground) ne traitent pas SIGINT, un trap -p
INT derriere le trap mort INT devrait te confirmer que rien n'est
positionné dans le fils.
Le 03-01-2006, Pascal Bourguignon a écrit :writes:1. pourquoi le fils ne meurt pas lors du INT?
peut etre par ce que les process asynchrone qui n'ont pas le job control
(et/ou ne sont pas/plus en foreground) ne traitent pas SIGINT, un trap -p
INT derriere le trap mort INT devrait te confirmer que rien n'est
positionné dans le fils.
Le 03-01-2006, Pascal Bourguignon a écrit :writes:1. pourquoi le fils ne meurt pas lors du INT?
peut etre par ce que les process asynchrone qui n'ont pas le job control
(et/ou ne sont pas/plus en foreground) ne traitent pas SIGINT, un trap -p
INT derriere le trap mort INT devrait te confirmer que rien n'est
positionné dans le fils.
mais il est vrai que ce n'est pas evident de s'y retrouver dans la doc
un mix du man bash et de la doc texinfo de la libc (glibc j'imagine) aux
sections "Job Control" me semble une bonne piste ;)
2. comment faire pour que le fils affiche sur la console sa
mort?
utiliser un autre signal (au hasard ton exemple devrait fonctionner
avec USR1), [...]
Le 03-01-2006, Pascal Bourguignon <spam@mouse-potato.com> a écrit :
octane@alinto.com writes:
1. pourquoi le fils ne meurt pas lors du INT?
peut etre par ce que les process asynchrone qui n'ont pas le job control
(et/ou ne sont pas/plus en foreground) ne traitent pas SIGINT, un trap -p
INT derriere le trap mort INT devrait te confirmer que rien n'est
positionné dans le fils.
mais il est vrai que ce n'est pas evident de s'y retrouver dans la doc
un mix du man bash et de la doc texinfo de la libc (glibc j'imagine) aux
sections "Job Control" me semble une bonne piste ;)
2. comment faire pour que le fils affiche sur la console sa
mort?
utiliser un autre signal (au hasard ton exemple devrait fonctionner
avec USR1), [...]
Le 03-01-2006, Pascal Bourguignon a écrit :writes:1. pourquoi le fils ne meurt pas lors du INT?
peut etre par ce que les process asynchrone qui n'ont pas le job control
(et/ou ne sont pas/plus en foreground) ne traitent pas SIGINT, un trap -p
INT derriere le trap mort INT devrait te confirmer que rien n'est
positionné dans le fils.
mais il est vrai que ce n'est pas evident de s'y retrouver dans la doc
un mix du man bash et de la doc texinfo de la libc (glibc j'imagine) aux
sections "Job Control" me semble une bonne piste ;)
2. comment faire pour que le fils affiche sur la console sa
mort?
utiliser un autre signal (au hasard ton exemple devrait fonctionner
avec USR1), [...]
Dans l'article ,
Xavier Gachon écrit:Le 03-01-2006, Pascal Bourguignon a écrit :writes:1. pourquoi le fils ne meurt pas lors du INT?
peut etre par ce que les process asynchrone qui n'ont pas le job control
(et/ou ne sont pas/plus en foreground) ne traitent pas SIGINT, un trap -p
INT derriere le trap mort INT devrait te confirmer que rien n'est
positionné dans le fils.
Le trap n'est-il justement par là pour redéfinir le traitement du
signal INT?
le signal n'est pris en compte qu'à la fin du sleep (quelque chose de ce
genre).
Dans l'article <slrndrmbj4.4q7.user@elendil.avalon.ombres.org>,
Xavier Gachon <xavier@shagshag.frmug.org> écrit:
Le 03-01-2006, Pascal Bourguignon <spam@mouse-potato.com> a écrit :
octane@alinto.com writes:
1. pourquoi le fils ne meurt pas lors du INT?
peut etre par ce que les process asynchrone qui n'ont pas le job control
(et/ou ne sont pas/plus en foreground) ne traitent pas SIGINT, un trap -p
INT derriere le trap mort INT devrait te confirmer que rien n'est
positionné dans le fils.
Le trap n'est-il justement par là pour redéfinir le traitement du
signal INT?
le signal n'est pris en compte qu'à la fin du sleep (quelque chose de ce
genre).
Dans l'article ,
Xavier Gachon écrit:Le 03-01-2006, Pascal Bourguignon a écrit :writes:1. pourquoi le fils ne meurt pas lors du INT?
peut etre par ce que les process asynchrone qui n'ont pas le job control
(et/ou ne sont pas/plus en foreground) ne traitent pas SIGINT, un trap -p
INT derriere le trap mort INT devrait te confirmer que rien n'est
positionné dans le fils.
Le trap n'est-il justement par là pour redéfinir le traitement du
signal INT?
le signal n'est pris en compte qu'à la fin du sleep (quelque chose de ce
genre).
When bash is interactive, in the absence of any traps, it ignores
SIGTERM (so that kill 0 does not kill an interactive shell), and SIGINT
is caught and handled (so that the wait builtin is interruptible)
...
When job control is not in effect, asynchronous commands ignore SIGINT
and SIGQUIT in addition to these inherited handlers.
le signal n'est pris en compte qu'à la fin du sleep (quelque chose
de ce genre).
ca c'est un cas d'ecole dont on trouve facilement des exemples sur
google,
When bash is interactive, in the absence of any traps, it ignores
SIGTERM (so that kill 0 does not kill an interactive shell), and SIGINT
is caught and handled (so that the wait builtin is interruptible)
...
When job control is not in effect, asynchronous commands ignore SIGINT
and SIGQUIT in addition to these inherited handlers.
le signal n'est pris en compte qu'à la fin du sleep (quelque chose
de ce genre).
ca c'est un cas d'ecole dont on trouve facilement des exemples sur
google,
When bash is interactive, in the absence of any traps, it ignores
SIGTERM (so that kill 0 does not kill an interactive shell), and SIGINT
is caught and handled (so that the wait builtin is interruptible)
...
When job control is not in effect, asynchronous commands ignore SIGINT
and SIGQUIT in addition to these inherited handlers.
le signal n'est pris en compte qu'à la fin du sleep (quelque chose
de ce genre).
ca c'est un cas d'ecole dont on trouve facilement des exemples sur
google,
Dans l'article ,
Xavier Gachon écrit:
[snip]
When job control is not in effect, asynchronous commands ignore SIGINT
and SIGQUIT in addition to these inherited handlers.
Et que penses-tu de ce que j'ai dit dans mon autre réponse concernant
ce point-là ?
Noter le "from the keyboard". Est-ce que cela signifie que quand on
fait un Ctrl- ou un Ctrl-C, le signal correspondant ne doit pas être
envoyé au processus, ou est-ce que cela veut dire que les SIGQUIT et
SIGINT doivent toujours (même en cas de trap) être ignorés (mais alors
le clavier n'a rien à voir là-dedans) ?
En tout cas, zsh n'a pas le même comportement que bash: la commande
trap est toujours prise en compte.
élimine les shells comme langages de programmation quand
on veut une gestion avancée avec les signaux.
Dans l'article <slrndro3uf.jq.user@elendil.avalon.ombres.org>,
Xavier Gachon <xavier@shagshag.frmug.org> écrit:
[snip]
When job control is not in effect, asynchronous commands ignore SIGINT
and SIGQUIT in addition to these inherited handlers.
Et que penses-tu de ce que j'ai dit dans mon autre réponse concernant
ce point-là ?
Noter le "from the keyboard". Est-ce que cela signifie que quand on
fait un Ctrl- ou un Ctrl-C, le signal correspondant ne doit pas être
envoyé au processus, ou est-ce que cela veut dire que les SIGQUIT et
SIGINT doivent toujours (même en cas de trap) être ignorés (mais alors
le clavier n'a rien à voir là-dedans) ?
En tout cas, zsh n'a pas le même comportement que bash: la commande
trap est toujours prise en compte.
élimine les shells comme langages de programmation quand
on veut une gestion avancée avec les signaux.
Dans l'article ,
Xavier Gachon écrit:
[snip]
When job control is not in effect, asynchronous commands ignore SIGINT
and SIGQUIT in addition to these inherited handlers.
Et que penses-tu de ce que j'ai dit dans mon autre réponse concernant
ce point-là ?
Noter le "from the keyboard". Est-ce que cela signifie que quand on
fait un Ctrl- ou un Ctrl-C, le signal correspondant ne doit pas être
envoyé au processus, ou est-ce que cela veut dire que les SIGQUIT et
SIGINT doivent toujours (même en cas de trap) être ignorés (mais alors
le clavier n'a rien à voir là-dedans) ?
En tout cas, zsh n'a pas le même comportement que bash: la commande
trap est toujours prise en compte.
élimine les shells comme langages de programmation quand
on veut une gestion avancée avec les signaux.
je reprend donc ton second message ici:Noter le "from the keyboard". Est-ce que cela signifie que quand on
fait un Ctrl- ou un Ctrl-C, le signal correspondant ne doit pas être
envoyé au processus, ou est-ce que cela veut dire que les SIGQUIT et
SIGINT doivent toujours (même en cas de trap) être ignorés (mais alors
le clavier n'a rien à voir là-dedans) ?
Cela veut dire que le signal correspondant ne doit etre envoyé qu'aux
processus dont le "process group ID" est egal au "current terminal
process group ID", ou tout au moins que seuls ceux-ci ne doivent pas
l'ignorer. C'est ce qui differencie les job de foreground de ceux
de background, et la raison pour laquelle j'avais orienté sur ces
sections de la documentation bash/libc.
Si l'on reprend l'exemple d'origine avec 2 scripts pere et fils en
bash et lancés sous bash. Le bash a partir duquel on lance le pere a
generalement le job control (sous Linux au moins). Selon l'extrait
de doc ci-dessus le job pere ne doit donc pas ignorer le SIGINT,
mais il n'a plus le job control par defaut (un echo $- devrait
confirmer), il lancera donc le process fils sans job control et en
asynchrone raison pour laquelle ce dernier ne traite plus le SIGINT
(doc). On peut modifier ce comportement en rajoutant un "set -m"
dans le pere mais dans ce cas le fils n'aurat plus le meme PGID que
le pere et s'il traitera un SIGINT "quelconque", il ignorera le
SIGINT clavier qui flinguera donc le pere mais pas lui.
je reprend donc ton second message ici:
Noter le "from the keyboard". Est-ce que cela signifie que quand on
fait un Ctrl- ou un Ctrl-C, le signal correspondant ne doit pas être
envoyé au processus, ou est-ce que cela veut dire que les SIGQUIT et
SIGINT doivent toujours (même en cas de trap) être ignorés (mais alors
le clavier n'a rien à voir là-dedans) ?
Cela veut dire que le signal correspondant ne doit etre envoyé qu'aux
processus dont le "process group ID" est egal au "current terminal
process group ID", ou tout au moins que seuls ceux-ci ne doivent pas
l'ignorer. C'est ce qui differencie les job de foreground de ceux
de background, et la raison pour laquelle j'avais orienté sur ces
sections de la documentation bash/libc.
Si l'on reprend l'exemple d'origine avec 2 scripts pere et fils en
bash et lancés sous bash. Le bash a partir duquel on lance le pere a
generalement le job control (sous Linux au moins). Selon l'extrait
de doc ci-dessus le job pere ne doit donc pas ignorer le SIGINT,
mais il n'a plus le job control par defaut (un echo $- devrait
confirmer), il lancera donc le process fils sans job control et en
asynchrone raison pour laquelle ce dernier ne traite plus le SIGINT
(doc). On peut modifier ce comportement en rajoutant un "set -m"
dans le pere mais dans ce cas le fils n'aurat plus le meme PGID que
le pere et s'il traitera un SIGINT "quelconque", il ignorera le
SIGINT clavier qui flinguera donc le pere mais pas lui.
je reprend donc ton second message ici:Noter le "from the keyboard". Est-ce que cela signifie que quand on
fait un Ctrl- ou un Ctrl-C, le signal correspondant ne doit pas être
envoyé au processus, ou est-ce que cela veut dire que les SIGQUIT et
SIGINT doivent toujours (même en cas de trap) être ignorés (mais alors
le clavier n'a rien à voir là-dedans) ?
Cela veut dire que le signal correspondant ne doit etre envoyé qu'aux
processus dont le "process group ID" est egal au "current terminal
process group ID", ou tout au moins que seuls ceux-ci ne doivent pas
l'ignorer. C'est ce qui differencie les job de foreground de ceux
de background, et la raison pour laquelle j'avais orienté sur ces
sections de la documentation bash/libc.
Si l'on reprend l'exemple d'origine avec 2 scripts pere et fils en
bash et lancés sous bash. Le bash a partir duquel on lance le pere a
generalement le job control (sous Linux au moins). Selon l'extrait
de doc ci-dessus le job pere ne doit donc pas ignorer le SIGINT,
mais il n'a plus le job control par defaut (un echo $- devrait
confirmer), il lancera donc le process fils sans job control et en
asynchrone raison pour laquelle ce dernier ne traite plus le SIGINT
(doc). On peut modifier ce comportement en rajoutant un "set -m"
dans le pere mais dans ce cas le fils n'aurat plus le meme PGID que
le pere et s'il traitera un SIGINT "quelconque", il ignorera le
SIGINT clavier qui flinguera donc le pere mais pas lui.
raison pour laquelle j'avais orienté sur ces sections de la
documentation bash/libc.
Oui, c'est documenté dans le man de bash (la libc n'a rien à faire
ici, d'ailleurs zsh avec la même libc se comporte différemment).
Mais d'après ce que tu dis (et c'était aussi mon interprétation),
bash n'est pas conforme à POSIX (et zsh l'est).
raison pour laquelle j'avais orienté sur ces sections de la
documentation bash/libc.
Oui, c'est documenté dans le man de bash (la libc n'a rien à faire
ici, d'ailleurs zsh avec la même libc se comporte différemment).
Mais d'après ce que tu dis (et c'était aussi mon interprétation),
bash n'est pas conforme à POSIX (et zsh l'est).
raison pour laquelle j'avais orienté sur ces sections de la
documentation bash/libc.
Oui, c'est documenté dans le man de bash (la libc n'a rien à faire
ici, d'ailleurs zsh avec la même libc se comporte différemment).
Mais d'après ce que tu dis (et c'était aussi mon interprétation),
bash n'est pas conforme à POSIX (et zsh l'est).