
64903
06.05.2008, aktualisiert am 07.05.2008 um 15:10:02 Uhr
PID herausfinden um Prozess zu beenden
Hey Leute,
ich habe folgendes Problem:
Auf einen Windows 2000 Server wird eine cm.exe aus ca. 10 verschiedenen Verzeichnissen gestartet.
Wir haben eine kleine Watchdog-Applikation laufen, die unter anderen diese 10 Prozesse überwacht.
Der Watchdog ist auch in der Lage den Prozess neu zu starten
"%CAPPATH%\bin\cm.exe server stop"
"%CAPPATH%\bin\cm.exe server start"
Leider kommt es vor, dass dieser Neustart nicht gelingt bzw. der Prozess nicht mehr stoppt.
Deshalb möchten ich einen "Kill-Befehl" hinterherschicken.
Bisher habe ich leider noch keine Möglichkeit gefunden, ausser über die PID.
1) Wie finde ich die PID zu "%CAPPATH%\bin\cm.exe" heraus?
oder
2) Wie kann ich den Prozess "%CAPPATH%\bin\cm.exe" killen?
Danke für jegliche Hilfe.
Gruss
Oliver
ich habe folgendes Problem:
Auf einen Windows 2000 Server wird eine cm.exe aus ca. 10 verschiedenen Verzeichnissen gestartet.
Wir haben eine kleine Watchdog-Applikation laufen, die unter anderen diese 10 Prozesse überwacht.
Der Watchdog ist auch in der Lage den Prozess neu zu starten
"%CAPPATH%\bin\cm.exe server stop"
"%CAPPATH%\bin\cm.exe server start"
Leider kommt es vor, dass dieser Neustart nicht gelingt bzw. der Prozess nicht mehr stoppt.
Deshalb möchten ich einen "Kill-Befehl" hinterherschicken.
Bisher habe ich leider noch keine Möglichkeit gefunden, ausser über die PID.
1) Wie finde ich die PID zu "%CAPPATH%\bin\cm.exe" heraus?
oder
2) Wie kann ich den Prozess "%CAPPATH%\bin\cm.exe" killen?
Danke für jegliche Hilfe.
Gruss
Oliver
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 87023
Url: https://administrator.de/forum/pid-herausfinden-um-prozess-zu-beenden-87023.html
Ausgedruckt am: 03.05.2025 um 05:05 Uhr
13 Kommentare
Neuester Kommentar
Hallo Olli1234 und willkommen im Forum!
Mit dem folgende VBScript kannst Du einen Prozess auf Basis seines Pfades "killen":
Beim Aufruf ist der gewünschte Pfad zu übergeben - wenn das Script zB unter "C:\Scripts\TerminateProcessByPath.vbs" gespeichert wurde, dann:
Grüße
bastla
Mit dem folgende VBScript kannst Du einen Prozess auf Basis seines Pfades "killen":
'TerminateProcessByPath.vbs
If WScript.Arguments.Count < 1 Then
WScript.Echo "Pfad des zu beendenden Prozesses als Parameter übergeben!"
WScript.Quit
End If
strProc = LCase(WScript.Arguments(0))
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process",,48)
For Each objItem in colItems
If Not IsNull(objItem.ExecutablePath) Then
If LCase(objItem.ExecutablePath) = strProc Then
WScript.Echo "Beende: " & objItem.ProcessId & " " & objItem.Name & " (" & objItem.ExecutablePath & ")"
objItem.Terminate
End If
End If
Next
cscript //nologo C:\Scripts\TerminateProcessByPath.vbs "%CAPPATH%\bin\cm.exe"
Grüße
bastla

Ich glaub Du kannst den Prozess mit Taskkill über den Schalter /im direkt killen.
Schau doch mal hier nach: http://technet2.microsoft.com/windowsserver/en/library/c1db6dae-41c3-4c ...
Schau doch mal hier nach: http://technet2.microsoft.com/windowsserver/en/library/c1db6dae-41c3-4c ...
Hallo Olli1234!
Etwa so:
[Edit] Sollten mehrere Prozesse gefunden werden, wird bei obiger Version nur der erste gestoppt - falls das ev nicht so gemeint war, folgende Alternative (in der Sparvariante
mit nur einer Zeile und ohne "cut.exe", aber immer noch zur Verwendung in einem Batch, daher %%i):
[/Edit]
Grüße
bastla
P.S.: Wie bringst Du "tasklist" und "taskkill" auf dem 2000er-Server zum Laufen?
Etwa so:
@echo off & setlocal
set PID=
for /f %%i in ('tasklist /fi "SERVICES eq blahblahblah" /fo list ^| find "PID:" ^| d:\temp\unix\cut.exe -C:15') do if not defined PID set PID=%%i
echo Beende Prozess: %PID%
taskkill /f /PID %PID%
[Edit] Sollten mehrere Prozesse gefunden werden, wird bei obiger Version nur der erste gestoppt - falls das ev nicht so gemeint war, folgende Alternative (in der Sparvariante
for /f "tokens=2 delims=," %%i in ('tasklist /fi "SERVICES eq blahblahblah" /fo csv^|more +2') do if "%%~i" neq "" echo Beende Prozess: %%~i & taskkill /f /PID %%~i
Grüße
bastla
P.S.: Wie bringst Du "tasklist" und "taskkill" auf dem 2000er-Server zum Laufen?

@bastla
das mit Server2000 habe ich übersehen..dafür wäre wohl pskill geeignet.
das mit Server2000 habe ich übersehen..dafür wäre wohl pskill geeignet.
Hallo Olli1234!
Die "for"-Zeile sähe dann so aus:
Grüße
bastla
Dein Code funktioniert also auch ohne "tokens=2 delims"
Diese Schreibweise hat nichts damit zu tun, wieviele Prozesse gefunden werden, sondern zerlegt nur die "tasklist"-Ausgabe sauberer als mit der "cut.exe" ...Die Anführungszeichen vor unter hinter dem Parameter sollten eigentlich nicht mehr enthalten sein.
Die Schreibweise dafür ist:set "servicename=%~1"
for /F %i in ('tasklist /fi "SERVICES eq "%servicename%"" /fo list | find "PID:" | d:\unix\cut.exe -C:15') do if not defined PID set PID=%i
Grüße
bastla
Hallo Olli1234!
Freut mich, dass es klappt.
Vielleicht magst Du auch noch abschließend Deinen endgültigen Batch zwischen -Tags setzen ...
Grüße
bastla
Freut mich, dass es klappt.
Thread kann damit geschlossen werden.
Das könntest Du auch Wie kann ich einen Beitrag als gelöst markieren? dokumentieren.Vielleicht magst Du auch noch abschließend Deinen endgültigen Batch zwischen -Tags setzen ...
Grüße
bastla
Moin Olli1234,
Nein, das sehe ich anders....
Für alle MitleserInnern ist unklar, wieso Du denn auf dem W2000er Server nun doch die "TaskList" und "TaskKill"-Utililies am Laufen hast.
Das wurde mehrfach hier im Beitrag angefragt - nur Du kannst die Antwort geben.
Grüße
Biber
Thread kann damit geschlossen werden.
Nein, das sehe ich anders....
Für alle MitleserInnern ist unklar, wieso Du denn auf dem W2000er Server nun doch die "TaskList" und "TaskKill"-Utililies am Laufen hast.
Das wurde mehrfach hier im Beitrag angefragt - nur Du kannst die Antwort geben.
Grüße
Biber