Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1816 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [shell] recuperer le numero de process d'un fils

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[shell] recuperer le numero de process d'un fils

n°1578040
zoidberg
Gloire au crapaud Hypno!!
Posté le 22-06-2007 à 14:47:58  profilanswer
 

:hello:  
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,
++

mood
Publicité
Posté le 22-06-2007 à 14:47:58  profilanswer
 

n°1578057
aigles
Posté le 22-06-2007 à 15:14:39  profilanswer
 

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  
blablabla...  
/chemin/commande &
wait $!
pid_commande=$!
re-blablabla...


 
jean-Pierre.

n°1578059
Elmoricq
Modérateur
Posté le 22-06-2007 à 15:18:15  profilanswer
 

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`

n°1578069
zoidberg
Gloire au crapaud Hypno!!
Posté le 22-06-2007 à 15:36:33  profilanswer
 

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 :pt1cable: , 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.
++


Message édité par zoidberg le 22-06-2007 à 15:40:24
n°1578086
aigles
Posté le 22-06-2007 à 15:58:09  profilanswer
 

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.
 
En effet, 'exec' permet d'exécuter une commande en remplacement du processus courant.
Tu peux donc faire :

pid_commande=`echo $$ && exec /chemin/commande`



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=$$"
pid_c="$(echo $$ && ps -fu $USER >&2)"
echo "pid_c=$pid_c"


Le résultat:

Pid=13906
     UID   PID  PPID   C    STIME    TTY  TIME CMD
  gssjgu 13906 17676   1 15:46:38  pts/2  0:00 -ksh  
  gssjgu 15582 13906   2 15:46:38  pts/2  0:00 ps -fu gssjgu  
  gssjgu 17676 18238   0 10:39:08  pts/2  0:00 -ksh  
pid_c=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.
 

n°1578089
Elmoricq
Modérateur
Posté le 22-06-2007 à 16:00:27  profilanswer
 

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')


Message édité par Elmoricq le 22-06-2007 à 16:08:03
n°1578110
aigles
Posté le 22-06-2007 à 16:15:56  profilanswer
 

Comme ça c'est tout bon.
 
Jean-Pierre.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [shell] recuperer le numero de process d'un fils

 

Sujets relatifs
[PHP] - récupérer le texte d'un fichier docScript qui vérifie qu'un process ne tourne pas deux fois en meme temps
[RESOLU] Récupérer la valeur d'un menu déroulant[DELPHI]Récupérer un dossier d'un SaveDialog
arrêt d'un process précis[Résolu] Récuperer des valeurs entrées dans une boite de dialogue
[Résolu-PHP]Connaitre le numéro de jour de l'année à partir d'une daterecupérer les infos de winamp
ACCESS Reprendre le numéro auto en cours dans un autre formulaireRécupérer le S/N + le prix dans un fichier CSV
Plus de sujets relatifs à : [shell] recuperer le numero de process d'un fils


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR