recuperer le numero de process d'un fils [shell] - Shell/Batch - Programmation
Marsh Posté le 22-06-2007 à 15:14:39
A ma connaissance il n‘est pas possible de récupérer le pid de la dernière commande exécutée sauf si celle-ci à été lancée en background.
Dans ce dernier cas on dispose de la variable $ !
Tu pourrais faire quelque chose du genre :
#!/bin/ksh |
jean-Pierre.
Marsh Posté le 22-06-2007 à 15:18:15
Puisque la commande est très rapide, que tu es obligé de l'attendre et que tu dois impérativement récupérer son PID, je te propose d'utiliser "exec" à ton avantage.
En effet, 'exec' permet d'exécuter une commande en remplacement du processus courant.
Tu peux donc faire :
pid_commande=`echo $$ && exec /chemin/commande` |
Marsh Posté le 22-06-2007 à 15:36:33
Merci, je vais regarder tout ca, mais rapidement:
@aigles, j'avais essaye $!, mais quand je faisais un 'ls &' suivi d'un 'echo $!' le pid ne changeait que de temps en temps , c'est vraiment bizarre. ptet un comportement etrange sous AIX 5.3. faut que je reteste dans les vraies conditions.
@Elmoricq, je vais tester cette solution aussi, va falloir que j'adapte car la commande en question crache un peu de logs.
En tout cas merci, ca devrait bien m'aider, je vous tiens au jus.
++
Marsh Posté le 22-06-2007 à 15:58:09
Elmoricq a écrit : Puisque la commande est très rapide, que tu es obligé de l'attendre et que tu dois impérativement récupérer son PID, je te propose d'utiliser "exec" à ton avantage.
|
Je n'ai pas réussi à faire fonctionner (sous AIX 4.3 et 5.2) cette technique pourtant astucieuse au premier abord :
Mon script de test
echo "Pid=$$" |
Le résultat:
Pid=13906 |
Le pid récupéré 13906 est celui du process exécutant mon shell, alors que le pid du process exécutant la commande ps est 15582 (avec pour ppid 13906).
J'ai essayé de remplacer
echo $$ |
par
eval echo \$\$ |
mais sans succés.
Jean-Pierre.
Marsh Posté le 22-06-2007 à 16:00:27
Essaie avec :
pid_c="$(echo $$ && exec ps -fu $USER >&2)" |
En fait, sans le exec, $() crée un sous-shell, et lancer un "ps" démarre le binaire en fils du shell.
Avec exec, $() crée un sous-shell, et lancer un "exec ps ..." démarre le binaire en remplacement du sous-shell, donc avec le même PID que ce dernier.
edit : ah mince, je viens de capter ce que tu dis, un instant...
edit 2 : je propose ceci, qu'en penses-tu ?
pid_c=$(ksh -c 'echo $$ && exec ps -fu $USER') |
Marsh Posté le 22-06-2007 à 14:47:58
J'aurai besoin, dans un script en ksh, de recuperer le numero de process d'un script que je viens de lancer.
#!/bin/ksh
blablabla...
/chemin/commande
pid_commande=??? #l'option magique pour recuperer le pid de 'commande'
re-blablabla...
Problemes: je ne suis pas maitre de cette commande, donc je ne peux pas la modifier et lui faire renvoyer son pid ($$), et il faut que j'attende la fin de son traitement (tres rapide) avant de continuer, donc pas de lancement en background et ps | grep.
Voila voila...
Une idee?
Merci,
++