Bonjour,
je met mon script tt d'abord afin que vous compreniez ce que j'aimerais faire.
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.
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 } } }
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
Partager