Schrift
[thread]11512[/thread]

Wie überprüfen ob ein Prozess läuft und killen?

Leser: 2


<< >> 7 Einträge, 1 Seite
AndiS
 2008-03-22 23:00
#107381 #107381
User since
2008-02-20
9 Artikel
BenutzerIn
[default_avatar]
Hallo!

Mittlerweile werde ich in perl immer besser, aber es ist noch ein weiter Weg ;)

Ich programmiere zur Zeit für Windows ein Perl-Script.
Dabei möchte ich überprüfen, ob eine Anwendung ausgeführt wird, sprich irgendeine exe gerade läuft und wenn dies der Fall ist, diesen Prozess killen.

Ich habe jetzt schon etwas herumgeschaut und bin über Win32::Process gestolpert, aber so recht hilft mir das nicht weiter.

Soweit ich das verstanden habe, kann ich dieses Modul nur verwenden, wenn ich zuvor mit create einen Prozess erzeugt habe!?

Ich würde aber gerne über einen laufenden Prozess die Kontrolle übernehmen.

Gibt es dafür ein extra Modul oder Funktion?

Danke euch!

Schöne Grüße,

AndiS
DanielH
 2008-03-22 23:56
#107383 #107383
User since
2007-11-15
54 Artikel
BenutzerIn
[default_avatar]
Prozesse kannst du mit kill killen ;)

Dazu brauchst du allerdings die Prozess ID. Unter Linux kann man die relativ einfach per top etc. rausfinden; keine Ahnung wie das bei Windows geht..

kill: http://perldoc.perl.org/functions/kill.html
AndiS
 2008-03-23 13:48
#107393 #107393
User since
2008-02-20
9 Artikel
BenutzerIn
[default_avatar]
Das ist zumindest schonmal ein Anfang :)

Das kann doch eigentlich fast nicht sein, dass das schweizer Taschenmesser unter den Programmiersprachen so ein Prozessüberwachung nicht implementiert hat...
Ich such mal weiter, vielleicht finde ich noch irgendwo was.
renee
 2008-03-23 13:57
#107394 #107394
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;
use Win32::Process::Info;

my $wpi  = Win32::Process::Info->new;
my @info = $wpi->GetProcInfo;

print $_->{Name},"\n" for @info;

my @list = grep{ $_->{Name} =~ /gesuchteAnwendung\.exe$/ }@list;
kill $_->{ProcessId} for @list;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
AndiS
 2008-03-23 14:42
#107395 #107395
User since
2008-02-20
9 Artikel
BenutzerIn
[default_avatar]
@ renee

Vielen Dank! Ich glaube da ist ein kleiner Fehler in Zeile 13. Am Schluss sollte @info stehen.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
use strict;
use warnings;
use Data::Dumper;
use Win32::Process::Info;

my $wpi  = Win32::Process::Info->new;
my @info = $wpi->GetProcInfo;

my @list = grep{ $_->{Name} =~ /cmd\.exe$/ }@info;
print $_->{ProcessId}, "\n" for @list;
kill $_->{ProcessId} for @list;


Ich habe mal etwas umgebaut, die PIDs werden gefunden, aber der kill Befehl zeigt keine Wirkung. Eigentlich sollte das klappen, aber notepad.exe oder cmd.exe bleiben offen
renee
 2008-03-23 14:53
#107396 #107396
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mach:
Code (perl): (dl )
kill( 9, $_->{ProcessId} ) for @list;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
betterworld
 2008-03-23 17:52
#107402 #107402
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
renee+2008-03-23 13:53:49--
Mach:
Code (perl): (dl )
kill( 9, $_->{ProcessId} ) for @list;

Warum denn gleich mit 9ern um sich schmeissen? 15 wuerde ja auch erstmal reichen. kill mit einem Argument tut halt nichts, das war oben das Problem.
(Alles unter der Annahme, dass kill unter Windows so geht wie unter Unix)
<< >> 7 Einträge, 1 Seite



View all threads created 2008-03-22 23:00.