Précédent   Forum des professionnels en informatique > Systèmes > Linux
Linux Forum d'entraide sur le système Linux. Avant de poster -> Tutoriels Linux, F.A.Q Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/11/2007, 15h10   #1
Futur Membre du Club
 
Inscription : septembre 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 45
Points : 18
Points : 18
Par défaut [Unix] Savoir si un processus (avec PID connu) tourne

Bonjour,

Dans un script Shell sh, je lance un processus en tâche de fond, et je note son PID avec la commande $! :
proc_id=$!
Pour tester si ce processus tourne toujours, actuellement j'utilise un ps suivi d'un grep :
present=`ps -ef -o pid | grep $proc_id`

Cependant, cette commande est buguée : par exemple si mon PID est 28, que le processus s'est arrêté, mais que j'ai un processus ayant pour PID 128, le grep va le retourner, et ainsi je vais considérer que mon processus tourne toujours.

Comment puis-je savoir qu'un processus dont le PID est connu tourne ou non ?
doukem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2007, 16h48   #2
Futur Membre du Club
 
Inscription : septembre 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 45
Points : 18
Points : 18
En fait je pense que j'ai trouvé :
present=`ps -ef -o pid | grep '^$proc_id$'`

En ajoutant ^ et $, je sais que mon ID n'est pas contenu dans un autre
doukem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2007, 22h55   #3
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
Une façon de gérer ça :

exemple de script :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
echo "* Lancement d'un processus en background "
 
sleep 10 &
 
echo "* Processus en background : $!"
 
echo -n "* Autres traitements..."
i=0
while (($i < 5)) ; do
	((i=i+1))
	sleep 1
	echo -n "."
done
 
echo "."
echo "* Attente FIN Processus en background : $!"
 
wait $!
 
echo "* FIN Processus en background : $!"

Résultat :

Code :
1
2
3
4
5
* Lancement d'un processus en background 
* Processus en background : 5744
* Autres traitements.........
* Attente FIN Processus en background : 5744
* FIN Processus en background : 5744
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 22h25   #4
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 969
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 969
Points : 1 376
Points : 1 376
"wait" est la bonne solution si on veut un appel bloquant. Dans le cas contraire, une solution plus simple que le "ps ... | grep ..." consiste à utiliser "kill -0" :
Code :
1
2
3
4
5
6
 
while kill -0 $pid 2>/dev/null
do
  echo $pid tourne toujours
  sleep 2
done
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2007, 10h34   #5
Futur Membre du Club
 
Inscription : septembre 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 45
Points : 18
Points : 18
Merci, effectivement le wait et le kill -0 sont plus propres que le ps | grep
doukem est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h02.


 
 
 
 
Partenaires

Hébergement Web