Windowsprozess beenden mit Perl (killall)

Was man unter Unix/Linux bequem auf der Konsole mit mit dem Befehl "killall" machen kann, gestaltet sich unter Windows etwas anspruchsvoller. Gut, dass man sich mit Perl leicht weiter behelfen kann.

In diesem kleinen Programm wird das Modul Win32::Process::List verwendet. Wenn folgende Meldung die Ausführung quittiert, fehlt dieses.

Can't locate Win32/Process/List.pm in @INC (you may need to install the Win32::Process::List module) (@INC contains: C:/ Perl64/site/lib C:/Perl64/lib .) at .\Process.pl line 4. BEGIN failed--compilation aborted at .\Process.pl line 4.

Das Problem lässt sich mittels "CPAN" lösen: cpan Win32::Process::List

Anschließend kann das Programm ausgeführt werden. Zuvor sollte jedoch sichergestellt sein, dass Windows Editor "notepad" auch läuft; dieser soll schließlich durch das Skript exemplarisch beendet werden.

#!/usr/bin/perl # use Cwd qw(chdir); use Win32::Process::List; use strict; use warnings; # my $prg = 'notepad.exe'; my $P = Win32::Process::List->new(); my %list = $P->GetProcesses(); if (my @pids = grep {$list{$_} eq $prg} keys %list) { print "@pids\n"; kill 9, $_ for (@pids); }

Wenn der Prozess gefunden wird, werden dessen PIDs angezeigt und sogleich beendet.