Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Stephane Chazelas
2004-11-10, 10:13(+01), chatiman:
la variable $$ ne semble pas marcher dans les processus fils de meme pour $PPID :
( echo fils: $$ ) & echo pere: $$
m'affiche: fils: 6656 pere: 6656
pourtant il y a bien 2 processus shell d'après ps
Est-ce normal ?
Oui, c'est comme ca et heureusement. Il y a des cas ou il est difficile de savoir ce qui est lancé dans un sous-shell ou pas et ca depend meme des shells.
$$ est le PID du shell qui a lancé le script par definition. Les forks successifs, c'est la soupe interne du shell.
Si on allait par la,
echo "$$"
donnerait le pid du shell (parce que echo est builtin)
et
/bin/echo "$$"
donnerait le pid du sous-shell qui va executer echo, pas facile de s'en sortir.
Tu voulais peut-etre:
( ... ) & pere=$$ fils=$!
-- Stephane
2004-11-10, 10:13(+01), chatiman:
la variable $$ ne semble pas marcher dans
les processus fils de meme pour $PPID :
(
echo fils: $$
) &
echo pere: $$
m'affiche:
fils: 6656
pere: 6656
pourtant il y a bien 2 processus shell
d'après ps
Est-ce normal ?
Oui, c'est comme ca et heureusement. Il y a des cas ou il est
difficile de savoir ce qui est lancé dans un sous-shell ou pas
et ca depend meme des shells.
$$ est le PID du shell qui a lancé le script par definition. Les
forks successifs, c'est la soupe interne du shell.
Si on allait par la,
echo "$$"
donnerait le pid du shell (parce que echo est builtin)
et
/bin/echo "$$"
donnerait le pid du sous-shell qui va executer echo, pas facile
de s'en sortir.
la variable $$ ne semble pas marcher dans les processus fils de meme pour $PPID :
( echo fils: $$ ) & echo pere: $$
m'affiche: fils: 6656 pere: 6656
pourtant il y a bien 2 processus shell d'après ps
Est-ce normal ?
Oui, c'est comme ca et heureusement. Il y a des cas ou il est difficile de savoir ce qui est lancé dans un sous-shell ou pas et ca depend meme des shells.
$$ est le PID du shell qui a lancé le script par definition. Les forks successifs, c'est la soupe interne du shell.
Si on allait par la,
echo "$$"
donnerait le pid du shell (parce que echo est builtin)
et
/bin/echo "$$"
donnerait le pid du sous-shell qui va executer echo, pas facile de s'en sortir.
Tu voulais peut-etre:
( ... ) & pere=$$ fils=$!
-- Stephane
chatiman
Tu voulais peut-etre:
( ... ) & pere=$$ fils=$!
oui mais j'ai un script un peu complexe du type ( # fils1 trap "exit 1" USR1 ( #fils2 sleep ... kill -USR1 fils1 ) &
) &
et je voudrais que fils2 puisse connaitre le pid de fils1 (impossible avec $!) afin de le tuer (envoyer un SIGUSR1 en fait) au bout d'un certain temps c'est la seule maniere que j'ai trouvé pour réaliser un timeout.
Tu voulais peut-etre:
(
...
) &
pere=$$
fils=$!
oui mais j'ai un script un peu complexe du type
(
# fils1
trap "exit 1" USR1
(
#fils2
sleep ...
kill -USR1 fils1
) &
) &
et je voudrais que fils2 puisse connaitre le pid de fils1 (impossible
avec $!) afin de le tuer (envoyer un SIGUSR1 en fait) au bout d'un
certain temps c'est la seule maniere que j'ai trouvé pour réaliser un
timeout.
oui mais j'ai un script un peu complexe du type ( # fils1 trap "exit 1" USR1 ( #fils2 sleep ... kill -USR1 fils1 ) &
) &
et je voudrais que fils2 puisse connaitre le pid de fils1 (impossible avec $!) afin de le tuer (envoyer un SIGUSR1 en fait) au bout d'un certain temps c'est la seule maniere que j'ai trouvé pour réaliser un timeout.
et je voudrais que fils2 puisse connaitre le pid de fils1 (impossible avec $!) afin de le tuer (envoyer un SIGUSR1 en fait) au bout d'un certain temps c'est la seule maniere que j'ai trouvé pour réaliser un timeout. [...]
Tu peux envoyer un USR1 au process group et faire en sorte que seul fils1 ne l'ignore pas:
et je voudrais que fils2 puisse connaitre le pid de fils1 (impossible
avec $!) afin de le tuer (envoyer un SIGUSR1 en fait) au bout d'un
certain temps c'est la seule maniere que j'ai trouvé pour réaliser un
timeout.
[...]
Tu peux envoyer un USR1 au process group et faire en sorte que
seul fils1 ne l'ignore pas:
et je voudrais que fils2 puisse connaitre le pid de fils1 (impossible avec $!) afin de le tuer (envoyer un SIGUSR1 en fait) au bout d'un certain temps c'est la seule maniere que j'ai trouvé pour réaliser un timeout. [...]
Tu peux envoyer un USR1 au process group et faire en sorte que seul fils1 ne l'ignore pas: