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

Langage Perl Discussion :

Tuer un processus lance par system sous perl


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 120
    Points : 65
    Points
    65
    Par défaut Tuer un processus lance par system sous perl
    J' ai fait un script perl qui fait un fork et dans le processus fils cree, lance par exemple un system("find /"). Je voudrais killer le find. Comment je dois m'y prendre ? j'arrive a killer le processus fils mais pas le processus cree dans le processus fils (le find)

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Gérer soi-même le system() pour connaître son pid ? Autrement dit faire un nouveau fork puis un exec() dedans ?

    --
    Jedaï

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 120
    Points : 65
    Points
    65
    Par défaut
    Voila mon code. En remplacant exec par system, ca me donne le meme resultat.
    Quand je lance la fonction signal avec timeout=1, et que je fais un ps -a | grep find , j'ai toujours un "find /" dans la liste des processus.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    sub catch_alrm
    {
        kill (9, $pid);
        $too_long = 1;
    }
     
    sub catch_empty 
    {
    }
     
    $SIG{ALRM} = \&catch_alrm;
    $SIG{SEGV} = \&catch_empty;
    $SIG{BUS} = \&catch_empty;
     
    sub signal {
        my ($prog, $timeout, $stdout, $stderr, $res) = @_;    
     
        $too_long = 0;
        $pid=fork;
        if ($pid) 
        {
    	eval 
    	{
    	    # PERE
    	    if ($timeout != 0) 
    	    {
    		alarm $timeout;
    	    }
    	    waitpid($pid, 0);
    	    alarm 0;
     
    	    kill (9, $pid);
    	}
        }
        else
        {
    	# FILS
    	my $result = 0;
     
    	$result = exec ("find / > /dev/null 2> /dev/null");
    	print ("fils > exit\n");
    	exit();
        }
    }

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 120
    Points : 65
    Points
    65
    Par défaut
    autre precision : quand dans mon code, je met un print($pid."\n"); avant le killage, il va m'afficher un PID du genre 12354 et quand je fais mon ps -a | grep find pour savoir si find a bien ete killee, il me met un truc du genre 45642 find / (pas le meme pid). je comprend vraiment pas

  5. #5
    Jeh
    Jeh est déconnecté
    Membre actif Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Points : 250
    Points
    250
    Par défaut
    Citation Envoyé par gedeon555
    autre precision : quand dans mon code, je met un print($pid."\n"); avant le killage, il va m'afficher un PID du genre 12354 et quand je fais mon ps -a | grep find pour savoir si find a bien ete killee, il me met un truc du genre 45642 find / (pas le meme pid). je comprend vraiment pas
    C'est normal car ton fork va créer un processus fils qui va ensuite lui même créer un autre processus pour le 'find'.

Discussions similaires

  1. Tuer un processus lancé par un script
    Par lyly_lt dans le forum Tcl/Tk
    Réponses: 2
    Dernier message: 28/12/2010, 11h46
  2. Envoyer un signal à un processus lancé par un user différent
    Par gedeon555 dans le forum Administration système
    Réponses: 1
    Dernier message: 17/03/2009, 23h38
  3. Réponses: 7
    Dernier message: 29/06/2008, 00h14
  4. Processus lancé par la commande system
    Par vinzzzz dans le forum POSIX
    Réponses: 3
    Dernier message: 11/12/2007, 20h33
  5. Handle (ID) d'un processus lancé par access
    Par fredoh dans le forum VBA Access
    Réponses: 4
    Dernier message: 30/05/2007, 08h29

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