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

Shell et commandes GNU Discussion :

Arrêter un processus parent et tous ses enfants


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    juillet 2009
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2009
    Messages : 101
    Points : 75
    Points
    75
    Par défaut Arrêter un processus parent et tous ses enfants
    Bonjour.

    Sur shell (Linux), je ne suis pas arrivé à trouver la bonne méthode pour arrêter un processus parent (dont je connais le pid) avec tous ses enfants (et petits enfants).

    La commande : "kill pid" ne tue que le processus père.

    Merci de votre aide

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    4 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 4 770
    Points : 11 990
    Points
    11 990
    Par défaut
    Bonjour

    J'ai peur que tu doives faire la liste toi-même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $  ps x -o pid:1,ppid:1 | awk -vc=6013 'BEGIN{t[c]=1;} NR==1{next;} (t[$2]==1){t[$1]=1;} (t[$1]==1){print $1;}'
    6013
    6014
    6739
    6740
    Note : cette commande liste 6013 et sa descendance. Et si 6014 est bien le fils de 6013, 6740 est le fils de 6014 et non 6013. À toi de changer le pid voulu. Dans une variable si tu veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    kill $( ps x -o pid:1,ppid:1 | awk -vc=6013 'BEGIN{t[c]=1;} NR==1{next;} (t[$2]==1){t[$1]=1;} (t[$1]==1){print $1;}' )
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    14 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 14 576
    Points : 33 658
    Points
    33 658
    Par défaut
    Regardes aussi au niveau de ton programme principal, peut-être a t'il une fonction qui envoi un signal à tous ses enfants lors de son arrêt. Si non prévu cf Flodelarab, son msg fait ressortir qq chose d’intéressant ; quid des processsus petits enfants ?

    Si c'est ton programme, tu peux aussi surveiller l'existence du père depuis les processus enfants.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    3 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : décembre 2012
    Messages : 3 862
    Points : 11 325
    Points
    11 325
    Par défaut
    Ou peut-être juste un kill -xx avec xx = pid du parent (plus précisément du leader du group (voir pgid) ) et ne pas oublié le signe '-' devant le pid, pour que le kill envoi le signal au group et non au process.

    KILL(1) User Commands KILL(1)

    NAME
    kill - send a signal to a process

    SYNOPSIS
    kill [options] <pid> [...]

    DESCRIPTION
    The default signal for kill is TERM. Use -l or -L to list available signals. Particularly useful signals include HUP, INT, KILL, STOP, CONT, and 0. Alternate signals may be
    specified in three ways: -9, -SIGKILL or -KILL. Negative PID values may be used to choose whole process groups; see the PGID column in ps command output. A PID of -1 is spe‐
    cial; it indicates all processes except the kill process itself and init.
    Cordialement.

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    3 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : décembre 2012
    Messages : 3 862
    Points : 11 325
    Points
    11 325
    Par défaut
    Avec un exemple:
    Sans le '-' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ nohup bash -c "nohup sleep 100 & sleep 200" &
    $ ps -a -o pid,pgid,cmd
      PID  PGID CMD
    25986 25986 bash -c nohup sleep 100 & sleep 200
    25987 25986 sleep 100
    25988 25986 sleep 200
    25989 25989 ps -a -o pid,pgid,cmd
    $ kill -- 25986
    $ ps -a -o pid,pgid,cmd
      PID  PGID CMD
    25987 25986 sleep 100
    25988 25986 sleep 200
    25990 25990 ps -a -o pid,pgid,cmd
    Bon, là, on voit que ça ne fonctionne pas.

    avec le '-' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ nohup bash -c "nohup sleep 100 & sleep 200" &
    $ ps -a -o pid,pgid,cmd
      PID  PGID CMD
    25993 25993 bash -c nohup sleep 100 & sleep 200
    25994 25993 sleep 100
    25995 25993 sleep 200
    25996 25996 ps -a -o pid,pgid,cmd
    $ kill -- -25993
    $ ps -a -o pid,pgid,cmd
      PID  PGID CMD
    25998 25998 ps -a -o pid,pgid,cmd
    Bingo...
    Cordialement.

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    4 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : septembre 2005
    Messages : 4 770
    Points : 11 990
    Points
    11 990
    Par défaut
    Dans ces exemples, le plus vieux processus du pgid est notre cible. Ce n'est pas forcément le cas.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    3 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : décembre 2012
    Messages : 3 862
    Points : 11 325
    Points
    11 325
    Par défaut
    Euh... un enfant et/ou un petit enfant est rarement plus vieux que le père et/ou le grand père...

    Mais il est vrai qu'ici, on tue toute la lignée.
    Cordialement.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/03/2019, 14h53
  2. Appliquer le même style aux TreeViewItems et à tous ses enfants
    Par zoaax dans le forum Windows Presentation Foundation
    Réponses: 12
    Dernier message: 02/10/2011, 23h38
  3. Réponses: 2
    Dernier message: 16/09/2009, 10h23
  4. Trouver tous les enfants et sous enfants d'un parent
    Par DEV-10 dans le forum Développement
    Réponses: 5
    Dernier message: 24/08/2009, 15h29
  5. [C#] [XML] Insérer un noeud entre un parent et ses enfants
    Par frechy dans le forum Windows Forms
    Réponses: 10
    Dernier message: 04/04/2005, 15h52

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