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

Python Discussion :

Killer un processus et ses fils avec python 2.4


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut Killer un processus et ses fils avec python 2.4
    Bonjour à tous,
    je cherche la bonne méthode à utiliser pour killer un processus et ses fils sous python 2.4 sous Linux . La simple fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    os.kill (pid, signal.SIGKILL)
    n'est pas suffisante et tue que le père.

    est apparu qu'à la version 2.6 et je trouve pas son équivalent en 2.4

    Merci pour votre aide

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    /proc/PID/task, a directory containing hard links to any tasks that have been started by this (i.e.: the parent) process.
    Vous savez déjà depuis votre dernier post exploiter cela.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def list_childrens(pid):
        return [int(c) for c in os.listdir('/proc/%s/task' % pid)]
    Pas de problème pour le return, c'est du New in version 2.3.

    @+

  3. #3
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Un exemple sur votre précédent sujet:
    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
    22
    23
    24
    import os
    import pwd
     
    def pid_list():
        return [int(x) for x in os.listdir('/proc') if x.isdigit()]
     
    def pid_to_name(pid):
        with open("/proc/%s/stat" % pid) as f:
            return f.read().split()[1].replace('(', '').replace(')', '')
     
    def find_owner(pid):
        return pwd.getpwuid(os.stat("/proc/%s" % pid).st_uid).pw_name
     
    def list_childrens(pid):
        return [int(c) for c in os.listdir('/proc/%s/task' % pid)]
     
    def test(proc_name, user_name):
        print "test for %s process / user %s" % (proc_name, user_name)
        for pid in pid_list():
            if pid_to_name(pid) == proc_name and find_owner(pid) == user_name:
                childrens = list_childrens(pid)
                print "Process for the pid %s : %s" % (pid, list_childrens(pid))
     
    test('geany', 'patrice')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    patrice@Zeus:~/Bureau$ /usr/bin/python2.6 signkill.py 
    test for geany process / user patrice
    Process for the pid 2005 : [2005, 2008, 2011, 2181]
    Process for the pid 2009 : [2009]

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Petit détail:

    Vous pouvez utiliser autre chose que SIGKILL* dans un premier temps. Du moins radical.

    Signal Name Number Description
    SIGHUP 1 Hangup (POSIX)
    SIGINT 2 Terminal interrupt (ANSI)
    SIGQUIT 3 Terminal quit (POSIX)
    SIGILL 4 Illegal instruction (ANSI)
    SIGTRAP 5 Trace trap (POSIX)
    SIGIOT 6 IOT Trap (4.2 BSD)
    SIGBUS 7 BUS error (4.2 BSD)
    SIGFPE 8 Floating point exception (ANSI)
    SIGKILL* 9 Kill(can't be caught or ignored) (POSIX)
    SIGUSR1 10 User defined signal 1 (POSIX)
    SIGSEGV 11 Invalid memory segment access (ANSI)
    SIGUSR2 12 User defined signal 2 (POSIX)
    SIGPIPE 13 Write on a pipe with no reader, Broken pipe (POSIX)
    SIGALRM 14 Alarm clock (POSIX)
    SIGTERM 15 Termination (ANSI)
    SIGSTKFLT 16 Stack fault
    SIGCHLD 17 Child process has stopped or exited, changed (POSIX)
    SIGCONT 18 Continue executing, if stopped (POSIX)
    SIGSTOP 19 Stop executing(can't be caught or ignored) (POSIX)
    SIGTSTP 20 Terminal stop signal (POSIX)
    SIGTTIN 21 Background process trying to read, from TTY (POSIX)
    SIGTTOU 22 Background process trying to write, to TTY (POSIX)
    SIGURG 23 Urgent condition on socket (4.2 BSD)
    SIGXCPU 24 CPU limit exceeded (4.2 BSD)
    SIGXFSZ 25 File size limit exceeded (4.2 BSD)
    SIGVTALRM 26 Virtual alarm clock (4.2 BSD)
    SIGPROF 27 Profiling alarm clock (4.2 BSD)
    SIGWINCH 28 Window size change (4.3 BSD, Sun)
    SIGIO 29 I/O now possible (4.2 BSD)
    SIGPWR 30 Power failure restart (System V)
    Et voir par la suite si le process et ses sous process sont encore alive, non ?
    En gros un kill -9 n'est sans doute pas utile ici.

    @+

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def list_childrens(pid):
        return [int(c) for c in os.listdir('/proc/%s/task' % pid)]
    Merci PauseKawa, toujours là pour aider

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/07/2010, 16h25
  2. Tuer un processus et ses fils
    Par dvp_zero dans le forum Linux
    Réponses: 1
    Dernier message: 30/03/2010, 17h30
  3. Réponses: 2
    Dernier message: 10/02/2009, 20h06
  4. Killer un process et ses fils
    Par rod59 dans le forum Administration système
    Réponses: 3
    Dernier message: 01/08/2007, 13h54

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