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 :

problème avec [perl] <defunct>


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Par défaut problème avec [perl] <defunct>
    Bonjour,

    je met mon script tt d'abord afin que vous compreniez ce que j'aimerais faire.

    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
     
    #!/usr/bin/perl
     
    sub list_dossier {
    	opendir(DOSSIER,"$_[0]" );
    	@entrees = readdir(DOSSIER);
    	closedir(DOSSIER);
    	return @entrees;
    }
     
    @list_folder=&list_dossier("./");   #crée tableau contenant nom des sous-dossiers
    foreach $folder (@list_folder) { # pour chaque sous-dossier
     
    	@list_file=&list_dossier("./$folder"); #crée tableau contenant nom des fichiers d'un sous-dossier
     
    	if ($folder ne '..' && $folder ne '.') {
    		print "\nanalyzing folder $folder ...\n";
    		@list_file=&list_dossier("./$folder"); #crée tableau contenant nom des fichiers d'un sous-dossier
     
    		foreach $file (@list_file) { # pour chaque fichier
    			defined($pid = fork);
    			unless($pid) {
    				print "\tanalyzing file $file ...";
    				exit(0);
    			}
    			###pleins de commande d'analyse de fichiers qui prennent 5 min/fichier
    			print " Done\n";  #signifie fin d'analyse du fichier
    		}
    	}
    }
    J'ai crée un processus fils via fork (merci à la FAQ) pour qu'il m'affiche en temps réel lorsqu'il commence l'analyse d'un fichier. Sinon, quand je mettais un simple print, il ne m'affichait rien en temps réel.
    Je tue donc le processus après qu'il m'ait affiché le message. Quand je fais un ps -u je vois qu'il y a [perl] <defunct> qui doit correspondre au processus fils qui est devenu zombie.
    Le problème est que ce script va tourner pendant plusieurs jours (voire semaines) et que j'ai plus de 80000 fichiers à analyser, je vais donc avoir 80000 zombies sur ma machine!
    quand je tue le zombie avec un kill -9 PPID, ça me tue mon script.

    Quelqu'un pourrait m'aider svp?

    merci

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Je ne comprends pas l'intérêt du fork dans ton programme.
    De plus, tu n'as même pas mis de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use strict;
    use warnings;
    $|++; est suffisant pour l'affichage de tes prints.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Par défaut
    je n'ai pas mis les use strict et warnings car j'ai simplifié au plus mon programme pour qu'il prenne le moins de place dans le message.

    j'utilisais le fork car j'avais vu dans un forum (je n'arrive plus à trouver le lien) qu'une personne avait le même problème que moi, le texte ne s'affichait pas en temps réel et il utilisait un fork pour palier ce souci.

    Effectivement, ça marche avec $|++;
    par contre je ne comprends pas cette ligne et ne trouve pas une page qui me l'explique. Peux tu m'expliquer stp?

    Merci encore.

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    http://www.developpez.net/forums/d12...e-script-perl/

    $| If set to nonzero, forces a flush right away and after every
    write or print on the currently selected output channel. Default
    is 0 (regardless of whether the channel is really buffered by
    the system or not; $| tells you only whether you've asked Perl
    explicitly to flush after each write). STDOUT will typically be
    line buffered if output is to the terminal and block buffered
    otherwise. Setting this variable is useful primarily when you
    are outputting to a pipe or socket, such as when you are running
    a Perl program under rsh and want to see the output as it's
    happening. This has no effect on input buffering. See "getc" in
    perlfunc for that. See "select" in perlfunc on how to select the
    output channel. See also IO::Handle.

    Mnemonic: when you want your pipes to be piping hot.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Par défaut
    ok, merci.

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

Discussions similaires

  1. [Bash] problème avec "perl -e"
    Par Rits dans le forum Linux
    Réponses: 2
    Dernier message: 24/08/2009, 10h32
  2. problème avec PERL et apache
    Par niro75 dans le forum Web
    Réponses: 2
    Dernier message: 01/04/2009, 00h17
  3. problème avec perl Makefile.PL
    Par flores dans le forum Modules
    Réponses: 2
    Dernier message: 30/10/2005, 20h09
  4. [Perl]problème avec fork
    Par LE NEINDRE dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 23/09/2005, 16h31
  5. Problème avec les boutons de perl Tk
    Par jkevin2 dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 02/09/2005, 18h18

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