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

Programmation et administration système Perl Discussion :

[reseaux] processus en parallèle


Sujet :

Programmation et administration système Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 18
    Points
    18
    Par défaut [reseaux] processus en parallèle
    Bonjour tout le monde,

    voila aujourd'hui je viens vers vous car je me questionne: peut-on parralléliser des processus en perl.

    Explication:

    J'ai écrit un programme pour NT 4 qui me permette de récupérer l'ID d'un process.
    J'ai un fichier de paramètre où j'écris le nom du process cherché ainsi que le temps en seconde au bout duquel je le kille.

    Format du fichier de paramètres:

    notepad.exe 10
    kodakimg.exe 5

    Voici ce que j'ai écris jusque là:

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #!/usr/local/bin/perl
     
    # Ce script vérifie la présence d'un process en mémoire afin de le détruire
    # s'il y reste plus d'une minute
    use strict;
    use Win32::Process;
     
    my ($process,$start,$cpt,$temp,$longueur,$processID,$rep,$parampid,
        $paramprocess);
    my (@pid,@process,@temp,@parametre,@timer);
     
    $rep ="D:\\appsserv\\admin\\kill avp32";
    $paramprocess = "$rep\\param\\process.ini";
    $parampid = 'D:\appsserv\admin\kill avp32\pid.txt';
    mkdir "$rep\\param",0777 unless -d "$rep\\param";
     
    # Inserre dans la liste @process le contenu du fichier $paramprocess
    open (INI, "$paramprocess") or die "Impossible d'ouvrir process.ini en lecture : $!";
    @parametre = <INI>;
    close INI;
    chomp (@parametre);
     
    $start = 0;
    while ($start<@parametre)
    {
       # compte en partant de la gauche le nombre de carractére contenu dans
       # @process avant de rencontrer la chaine " "
       $temp=index (@parametre[$start]," ",0);
       # récupére la longueur complète de la chaine @servers[0] pour l'affecter à
       # $longueur
       $longueur = length (@parametre[$start]);
       # substr permet de récupérer dans la chaine @servers[0] les x éléments définit
       # par $temp en commençant au rang 0 de la chaine.
       $processID = substr(@parametre[$start],0,$temp);
       @process = (@process,$processID);
       $processID = substr(@parametre[$start],$temp+1);
       @timer = (@timer,$processID);
       $start++;
    }
     
     
     
    # Pour chaque process de la liste on récupére une liste d'ID
    foreach $processID (@process)
    {
       $temp = '"D:\appsserv\admin\kill avp32\tlist.exe"|find /I "' . $processID . '" > "' . $parampid . '"';
       system(1,$temp) or die "error";
       open(INFILE, "$parampid") or die "Impossible d'ouvrir pid.txt en lecture : $!";
       @parametre = <INFILE>;
       close (INFILE);
       chomp (@parametre);
       @pid = (@pid, @parametre);
    }
    Je récupére donc bien 3 listes. L'une contient le nom du process, une autre la durée pour ce process enfin la troisième contenant l'ensemble des IDs.


    Ce que je souhaite faire:

    mettre en parrallèle le traitement de chaque process de manière à killer chaque process au bout du temps imparti.

    Si vous avez des idées car mes compétances sont un peu dépassées

    Merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 34
    Points : 18
    Points
    18
    Par défaut
    Pour résoudre mon pb, j'ai trouvé ça dans la doc mais je ne suis pas sûr de l'utiliser correctement car je ne comprends pas tous les tennant et aboutissant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    unless ($pid = fork) {
    unless (fork) {
    exec "what you really wanna do";
    die "no exec";
    # ... ou ...
    ## (code_perl_ici)
    exit 0;
    }
    exit 0;
    }
    waitpid($pid,0);

    voici ce qu j'ai compris quelqu'un peut-il confirmer
    unless ($pid = fork) { #déclare un nouveau process même si je comprends pas unless.
    unless (fork) { # précise le corps du programme executer par le process

    exec "what you really wanna do";
    die "no exec";
    # ... ou ...
    ## (code_perl_ici)

    # ligne à remplacer par le code perl à exécuter

    exit 0; #quitte le processus quand il est fini

    waitpid($pid,0); attends que $pid soit égale à 0.

  3. #3
    Membre actif
    Avatar de Choupi
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 223
    Points : 235
    Points
    235
    Par défaut
    Une annotation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    defined(my $pid = fork) or die "pas de fork";
    unless($pid){ #si on a un pid alors on est dans le process fils.
    exec "unefonction"; #le code du process fils.
    ...
    ... # ton process pere.
    ...
     
    waitpid($pid,0); # on attend que le fils se termine...

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

Discussions similaires

  1. [reseaux] Lister les processus sur une machine donnée
    Par BEAUJAULT dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 29/07/2004, 15h55
  2. [reseaux] Processus
    Par GMI3 dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 25/09/2003, 14h45
  3. [reseaux] Processus zombie...
    Par dclink dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 10/09/2003, 10h30
  4. [reseaux] redirection de flux
    Par Olive1808 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 12/08/2002, 09h24
  5. [réseaux] Bench en Perl pour avoir le débit entre 2 pc
    Par Frich dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 22/05/2002, 17h22

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