Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[shell] PID d'un sous processus

4 réponses
Avatar
Ph. Ivaldi
Bonjour,

Comment obtenir le PID d'un sous processus dans le sous processus lui
même.
Dans le code suivant
8<------8<------8<------8<------8<------8<------8<------8<------8<------
(
PID=$$
trap "echo \"trap sub-process $PID\"" HUP INT ABRT QUIT SEGV TERM EXIT
sleep 1
) &

echo "sub-process : $!"
echo "current-process : $$"
8<------8<------8<------8<------8<------8<------8<------8<------8<------

J'obtiens
8<------8<------8<------8<------8<------8<------8<------8<------8<------
sub-process : 12933
current-process : 12932
trap sub-process 12932
8<------8<------8<------8<------8<------8<------8<------8<------8<------

alors que je m'attendais à obtenir
trap sub-process 12933


Accessoirement est-il possible d'obtenir le code de retour d'un sous
processus détaché sans passer par un fichier auxiliaire ?

Merci,
--
Philippe Ivaldi.
http://www.piprime.fr/

4 réponses

Avatar
Stephane CHAZELAS
2009-10-09, 16:38(+02), Ph Ivaldi:
Bonjour,

Comment obtenir le PID d'un sous processus dans le sous processus lui
même.
Dans le code suivant
8<------8<------8<------8<------8<------8<------8<------8<------8<------
(
PID=$$
trap "echo "trap sub-process $PID"" HUP INT ABRT QUIT SEGV TERM EXIT
sleep 1
) &

echo "sub-process : $!"
echo "current-process : $$"
8<------8<------8<------8<------8<------8<------8<------8<------8<------

J'obtiens
8<------8<------8<------8<------8<------8<------8<------8<------8<------
sub-process : 12933
current-process : 12932
trap sub-process 12932
8<------8<------8<------8<------8<------8<------8<------8<------8<------

alors que je m'attendais à obtenir
trap sub-process 12933



$$, c'est le pid to shell qui interprete le script. Les fork de
sous-process, c'est de la cuisine interne. Par exemples, tous
les shells ne forkent pas dans $(...) et (...) et le
comportement pour ... | ... differe de shell a shell, et le
process qui interprete du code n'est pas forcement le meme que
celui qui execute la ou les commandes resultantes.

sh -c 'echo "$PPID"'

peut aider.

Accessoirement est-il possible d'obtenir le code de retour d'un sous
processus détaché sans passer par un fichier auxiliaire ?


[...]

wait "$pid"; echo "$?"


--
Stéphane
Avatar
Ph. Ivaldi
Le 09 octobre 2009, Stephane CHAZELAS écrivit :


$$, c'est le pid to shell qui interprete le script.



C'est pas plutôt le pid du process courant, le pid du shell qui
interprète étant $PPID ?

Les fork de
sous-process, c'est de la cuisine interne. Par exemples, tous
les shells ne forkent pas dans $(...) et (...) et le
comportement pour ... | ... differe de shell a shell, et le
process qui interprete du code n'est pas forcement le meme que
celui qui execute la ou les commandes resultantes.



Bon ben, c'est râpé alors...
Je vais procéder autrement.

sh -c 'echo "$PPID"'



Là ça me renvoie le pid du shell qui interprète le processus (mais je
n'en suis plus sûr):
8<------8<------8<------8<------8<------8<------8<------8<------8<------
$ sh -c 'echo "$PPID"'
6471

$ cat /home/pi/bin/essai
#!/bin/bash
echo "$PPID : $PPID"
echo "$$ : $$"

$ essai
$PPID : 6471
$$ : 10089

$ ps aux|grep 6471
pi 6471 0.0 0.2 7360 4016 pts/2 Ss 09:13 0:00 /bin/bash
pi 17896 0.0 0.0 1872 560 pts/2 S+ 18:08 0:00 grep 6471
8<------8<------8<------8<------8<------8<------8<------8<------8<------

Je ne comprends pas tout:
$ echo $PPID
6235

Je m'attendais à 6471

Accessoirement est-il possible d'obtenir le code de retour d'un sous
processus détaché sans passer par un fichier auxiliaire ?


wait "$pid"; echo "$?"



Oui, mais du coup ça ne ME sert plus à rien de détacher le processus s'il
faut l'attendre après.
Et s'il termine avant que s'exécute le wait, ça renvoie 0.
--
Philippe Ivaldi.
http://www.piprime.fr/
Avatar
Jogo
> > $$, c'est le pid to shell qui interprete le script.

C'est pas plutôt le pid du process courant, le pid du shell qui
interprète étant $PPID ?



$PPID c'est le pid du processus qui a lancé le processus en cours.

Je ne comprends pas tout:
$ echo $PPID
6235

Je m'attendais à 6471



Non car l'expansion de $PPID est faite par ton shell intéractif (echo
ne connais pas la variable $PPID). Du coup ta commande renvoie le pid
du processus qui a lancé ton shell intéractif.


--
Little girls, like butterflies, need no excuse.
-- Lazarus Long
Avatar
Ph. Ivaldi
Merci, c'est limpide maintenant.
--
Philippe Ivaldi.
http://www.piprime.fr/