Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PID herausfinden um Prozess zu beenden

Frage Entwicklung Batch & Shell

Mitglied: 64903

64903 (Level 1)

06.05.2008, aktualisiert 07.05.2008, 16252 Aufrufe, 13 Kommentare

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
Mitglied: bastla
06.05.2008 um 10:59 Uhr
Hallo Olli1234 und willkommen im Forum!

Mit dem folgende VBScript kannst Du einen Prozess auf Basis seines Pfades "killen":
01.
'TerminateProcessByPath.vbs 
02.
 
03.
If WScript.Arguments.Count < 1 Then 
04.
    WScript.Echo "Pfad des zu beendenden Prozesses als Parameter übergeben!" 
05.
    WScript.Quit 
06.
End If 
07.
 
08.
strProc = LCase(WScript.Arguments(0)) 
09.
strComputer = "." 
10.
 
11.
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
12.
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process",,48) 
13.
 
14.
For Each objItem in colItems 
15.
    If Not IsNull(objItem.ExecutablePath) Then 
16.
        If LCase(objItem.ExecutablePath) = strProc Then 
17.
            WScript.Echo "Beende: " & objItem.ProcessId & " " & objItem.Name & " (" & objItem.ExecutablePath & ")" 
18.
            objItem.Terminate 
19.
        End If 
20.
    End If 
21.
Next
Beim Aufruf ist der gewünschte Pfad zu übergeben - wenn das Script zB unter "C:\Scripts\TerminateProcessByPath.vbs" gespeichert wurde, dann:
01.
cscript //nologo C:\Scripts\TerminateProcessByPath.vbs "%CAPPATH%\bin\cm.exe"
Grüße
bastla
Bitte warten ..
Mitglied: 59769
06.05.2008 um 11:00 Uhr
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 ...
Bitte warten ..
Mitglied: bastla
06.05.2008 um 11:15 Uhr
@59769

Einmal unabhängig davon, dass Du mit dem Schalter "/im" keinen Pfad angeben kannst: "taskkill" gibt's erst ab XP / Server 2003 ...

Grüße
bastla
Bitte warten ..
Mitglied: 64903
06.05.2008 um 17:17 Uhr
Hi bastla und danke für die schnelle Antwort!!

Leider hat sich nun herausgestellt, dass der Pfad alleine nicht reicht.
Denn es gibt mindestens eine cm.exe, die mehrmals gestartet wird..

Folgender Code spuckt die PID vom richtigen Prozess aus:
1) tasklist /fi "SERVICES eq blahblahblah" /fo list | find "PID:" | d:\temp\unix\cut.exe -C:15

Ergebnis:
2345Leerzeichen
Leerzeile

Mit taskkill könnte ich den Prozess jetzt ja killen, aber wie nur?
2) taskkill /f /fi "PID eq ???"

Wie kann ich die das Ergebnis von 1) an der Stelle '???' aus 2) verwenden?

Gruss Oliver
Bitte warten ..
Mitglied: bastla
06.05.2008 um 17:42 Uhr
Hallo Olli1234!

Etwa so:
01.
@echo off & setlocal 
02.
set PID= 
03.
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 
04.
echo Beende Prozess: %PID% 
05.
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 mit nur einer Zeile und ohne "cut.exe", aber immer noch zur Verwendung in einem Batch, daher %%i):
01.
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
[/Edit]

Grüße
bastla

P.S.: Wie bringst Du "tasklist" und "taskkill" auf dem 2000er-Server zum Laufen?
Bitte warten ..
Mitglied: 64903
07.05.2008 um 10:36 Uhr
Hi bastla!

Es wird bisher immer nur ein Prozess gefunden!
Dein Code funktioniert also auch ohne "tokens=2 delims" super!! Danke dafür!!

Der nächste konsequente Schritt ist nun, den Namen des Services als Parameter zu übergeben.
Leider funktionert folgender Aufruf nicht:
processkill "blah - blah - blah"

Quelltext:
set servicename=%1

Ergebnis:
set servicename="blah - blah - blah"

for /F %i in ('tasklist /fi "SERVICES eq "blah - blah - blah"" /fo list | find "PID:" | d:\unix\cut.exe -C:15') do if not defined PID set PID=%i

Die Anführungszeichen vor unter hinter dem Parameter sollten eigentlich nicht mehr enthalten sein :-l
Aber ohne die Anführungszeichen (beim Aufruf) geht es natürlich auch nicht.

P.S.: Wie bringst Du "tasklist" und "taskkill" auf dem 2000er-Server zum Laufen?

Ich hatte erst auf deinem Windows 2000er-Server getestet. Da ich dann nicht weiter kam, habe ich auf dem Windows 2003er-Server weitergemacht, damit ich tasklist und taskkill benutzen kann.

Gruss
Oliver
Bitte warten ..
Mitglied: 59769
07.05.2008 um 10:45 Uhr
@bastla
das mit Server2000 habe ich übersehen..dafür wäre wohl pskill geeignet.
Bitte warten ..
Mitglied: bastla
07.05.2008 um 10:51 Uhr
Hallo Olli1234!

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:
01.
set "servicename=%~1"
Die "for"-Zeile sähe dann so aus:
01.
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
Bitte warten ..
Mitglied: 64903
07.05.2008 um 11:11 Uhr
Hallo bastla!
Danke für deine Mühe.... die Batch funktioniert jetzt so, wie sie soll

01.
@echo off & setlocal 
02.
set "servicename=%~1" 
03.
set PID= 
04.
for /f %%i in ('tasklist /fi "SERVICES eq %servicename%" /fo list ^| find "PID:" ^| d:\temp\unix\cut.exe -C:15') do if not defined PID set PID=%%i 
05.
taskkill /f /PID %PID%
Ich habe es jetzt so mit dem cut.exe gelassen!
Thread kann damit geschlossen werden.
Bitte warten ..
Mitglied: bastla
07.05.2008 um 11:52 Uhr
Hallo Olli1234!

Freut mich, dass es klappt.

Thread kann damit geschlossen werden.
Das könntest Du auch so dokumentieren.

Vielleicht magst Du auch noch abschließend Deinen endgültigen Batch zwischen <code></code>-Tags setzen ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
07.05.2008 um 13:03 Uhr
Moin Olli1234,

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
Bitte warten ..
Mitglied: 64903
07.05.2008 um 13:54 Uhr
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.

^^ Das hatte ich eigentlich schon beantwortet! Als ich angefangen hatte auf dem Testsystem unter Windows 2000er Server, kam ich nicht mehr weiter. Dann habe ich auf dem Livesystem mit Windows 2003er Server weitergetestet, da ich auf dem auch Tasklist und Taskkill benutzen konnte.

Ich hatte erst auf deinem Windows 2000er-Server getestet. Da ich dann nicht weiter kam,
habe ich auf dem Windows 2003er-Server weitergemacht, damit ich tasklist und taskkill
benutzen kann.

Mit anderen Worten: "Auf dem W2000er Server konnte ich selbstverständlich NICHT die "TaskList-" und "TaskKill"-Utilities benutzen"

Gruss
Oliver
Bitte warten ..
Mitglied: Biber
07.05.2008 um 15:10 Uhr
Moin Oliver,

sorry, Du hast recht - ich hatte es überlesen.
Dann schließe ich jetzt den Beitrag wie gewünscht.

Danke für die Rückmeldung.

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst Bestimmten wscript.exe Prozess beenden (6)

Frage von Knuefi zum Thema Batch & Shell ...

Batch & Shell
gelöst Windows Update Dienst per Batch beenden (12)

Frage von Justin98 zum Thema Batch & Shell ...

Server-Hardware
gelöst Netzteil Watt Power herausfinden (6)

Frage von M.Marz zum Thema Server-Hardware ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...