Bonjour,
En vue de tuer des processus connus par leurs noms ex skype.exe contenus dans une liste... j'utilise Win32:: Process::List qui renvoie une liste comme :
Voici ce que je fais, qui fonctionne bien et qui me convient amplement, sauf que ça ne ressemble pas beaucoup à du perl612 services.exe
2396 sftlist.exe
2156 sftvsa.exe
320 smss.exe
1488 spoolsv.exe
1844 sqlservr.exe
2188 sqlwriter.exe
1168 svchost.exe
368 svchost.exe
1044 svchost.exe
468 svchost.exe
3364 svchost.exe
1076 svchost.exe
768 svchost.exe
1516 svchost.exe
120 svchost.exe
1816 svchost.exe
848 svchost.exe
5020 svchost.exe
2300 svchost.exe
3596 taskeng.exe
4404 taskeng.exe
3552 taskhost.exe
544 wininit.exe
664 winlogon.exe
J'ai cherché sur le net, probablement mal, mais je n'ai pas trouvé mieux que la méthode à l'ancienne...
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 #! perl use warnings; use strict; use utf8; use Win32::Process::List; # Liste des processus en cours use Win32::Process; # Pour tuer un processus my $Proc = Win32::Process::List->new(); my %ListProc = $Proc->GetProcesses(); my $NbProc = keys (%ListProc); print "\n\nAvec doublons sur les noms de process\n"; foreach my $Pid (sort { $ListProc{$a} cmp $ListProc{$b} } keys %ListProc ) { my $Name = $ListProc{$Pid}; printf "%4d %25s\n", $Pid, $ListProc{$Pid}; } print "\n\nSuppression...\n"; my $Name = "" ; my $OldName = ""; foreach my $Pid (sort { $ListProc{$a} cmp $ListProc{$b} } keys %ListProc ) { $Name = $ListProc{$Pid}; if ( $Name eq $OldName ) { delete $ListProc{$Pid}; } $OldName = $Name; } print "\n\nDoublons supprimés\n"; foreach my $Pid (sort { $ListProc{$a} cmp $ListProc{$b} } keys %ListProc ) { my $Name = $ListProc{$Pid}; printf "%4d %25s\n", $Pid, $ListProc{$Pid}; }
Comment supprimer des values en doubles dans un hash... en perl véritable ?
MERCI d'avance !
Partager