IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

[Unix] Savoir si un processus (avec PID connu) tourne


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 45
    Points : 37
    Points
    37
    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 ?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 45
    Points : 37
    Points
    37
    Par défaut
    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

  3. #3
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Une façon de gérer ça :

    exemple de script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  4. #4
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    "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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while kill -0 $pid 2>/dev/null
    do
      echo $pid tourne toujours
      sleep 2
    done
    ɹǝsn *sıɹɐlos*

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 45
    Points : 37
    Points
    37
    Par défaut
    Merci, effectivement le wait et le kill -0 sont plus propres que le ps | grep

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/05/2014, 13h08
  2. Récupérer processus avec PID
    Par bappr dans le forum C
    Réponses: 8
    Dernier message: 24/02/2014, 20h23
  3. Piper processus avec pid
    Par CAThanatos dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 22/07/2010, 19h37
  4. Lancer un processus avec un PID donné
    Par bigsister dans le forum Linux
    Réponses: 8
    Dernier message: 08/11/2007, 13h00
  5. Réponses: 1
    Dernier message: 03/12/2006, 10h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo