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