blacksun
Goto Top

Batch: in Schleife prüfen ob ein Prozess läuft und diesen beenden

Hallo,

ich möchte gerne prüfen ob ein bestimmter Prozess gestartet ist.
Wenn ja, dann soll dieser und noch ein anderer beendet werden (mir geht's um 2 Befehle)
Wenn nein, dann soll 10 Sekunden gewartet werden und dann eine erneute Prüfung stattfinden.

Wenn der Prozess läuft und dann beendet wird, dann soll ebenfalls 10 Sekunden gewartet werden und auch dann wieder neu geprüft werden. Die Batch soll sich dann also nicht beenden.

Die Wartezeit soll möglichst schonend für den Prozessor sein.

Es sollen die Prozesse beendet werden die eigenen Userkontext laufen und nicht im Kontext anderer (Admin, andere Benutzer) auf der Maschine.

Wie mache ich das am besten?

Danke.

Content-ID: 381161

Url: https://administrator.de/forum/batch-in-schleife-pruefen-ob-ein-prozess-laeuft-und-diesen-beenden-381161.html

Ausgedruckt am: 22.12.2024 um 22:12 Uhr

emeriks
emeriks 24.07.2018 um 15:00:02 Uhr
Goto Top
Hi,
Batch
:loop
taskkill /IM bekannter_Prozess_1
taskkill /IM bekannter_Prozess_2
timeout 10
goto loop

E.
Kraemer
Kraemer 24.07.2018 um 15:21:58 Uhr
Goto Top
Bei solchen Fragen habe ich immer folgendes Bild im Kopf:

Mein Aquarium leckt. Wie bekomme ich meinen Hund dazu, alle 10 Minuten zu prüfen, ob die Pfütze groß genug ist, um diese zu saufen, damit das Parkett nicht drauf geht?

Gruß
Pjordorf
Pjordorf 24.07.2018 um 15:34:30 Uhr
Goto Top
Hallo,

Zitat von @Kraemer:
Mein Aquarium leckt. Wie bekomme ich meinen Hund dazu, alle 10 Minuten zu prüfen, ob die Pfütze groß genug ist, um diese zu saufen, damit das Parkett nicht drauf geht?
Salzwasser oder Warmwasser Aquarium?

Gruß,
Peter
Pjordorf
Pjordorf 24.07.2018 um 15:37:07 Uhr
Goto Top
Hallo,

Zitat von @blacksun:
Wenn der Prozess läuft und dann beendet wird, dann soll ebenfalls 10 Sekunden gewartet werden und auch dann wieder neu geprüft werden. Die Batch soll sich dann also nicht beenden.
Wäre es nicht sinnvoller diesen Process gar nicht erst starten zu lassen?

Die Wartezeit soll möglichst schonend für den Prozessor sein.
Was für eine CPU ist es denn?

Es sollen die Prozesse beendet werden die eigenen Userkontext laufen und nicht im Kontext anderer (Admin, andere Benutzer) auf der Maschine.
Kann dieseer Prozess denn im Kontext anderer dort gleichzeitig laufen? Lässt das uns unbekannte OS es denn zu?

Gruß,
Peter
Cougar77
Cougar77 24.07.2018, aktualisiert am 25.07.2018 um 07:32:46 Uhr
Goto Top
Das Skript würde ich aber nicht loopen lassen, sonder über einen Task alle 10 Sekunden neu aufrufen.
Nicht beenden ergibt wenig Sinn... Eher dem Dienst verbieten zu starten...
Penny.Cilin
Penny.Cilin 24.07.2018 um 17:44:24 Uhr
Goto Top
Zitat von @blacksun:

Hallo,
Hallo,
ich möchte gerne prüfen ob ein bestimmter Prozess gestartet ist.
Wenn ja, dann soll dieser und noch ein anderer beendet werden (mir geht's um 2 Befehle)
Wenn nein, dann soll 10 Sekunden gewartet werden und dann eine erneute Prüfung stattfinden.
Da fehlen mal wieder essentielle Informationen. Lese Dir bitte Wie man eine Frage richtig stellt, besonders den Abschnitt Je nach Fragestellung werden folgende Informationen zusätzlich benötigt: durch.
Also,
  • Um welche Betriebssysteme handelt es sich?
  • Wie heißen die Prozesse, um die es geht?
  • Was genau ist der Sinn / Zweck, den Du damit erreichen willst?
Wenn der Prozess läuft und dann beendet wird, dann soll ebenfalls 10 Sekunden gewartet werden und auch dann wieder neu geprüft werden. Die Batch soll sich dann also nicht beenden.

Die Wartezeit soll möglichst schonend für den Prozessor sein.
  • Was willst Du damit erreichen?
  • Sollen die Bits und Bytes geschont werden?
  • Soll Strom gespart werden?
  • Was genau meinst Du mit
schonend für den Prozessor ?
Hast Du bedenken, daß der Prozessor sich zu schnell abnutzt?

Falls Dir meine Fragen sollen kein sarkastisch vorkommen, ist das nicht bösartig gemein. Denn irgendwie habe ich das Gefühl, daß Du in der Materie wenig Wissen hast.
Deshalb meine Bitte erkläre Dich. Beantworte die Fragen, damit wir mit dem Deinem Input zielführende Antworten geben können.

Es sollen die Prozesse beendet werden die eigenen Userkontext laufen und nicht im Kontext anderer (Admin, andere Benutzer) auf der Maschine.
Deshalb nochmals
  • Was genau ist der Sinn und zweck Deines Vorhabens?
  • Was versprichst Du Dir davon?
  • Um welche Anzahl von User geht es?
  • Handelt es sich um eine Domäne oder eine Arbeitsgruppe?
  • Handelt es sich um Terminalserver?

Wie mache ich das am besten?

Danke.

Gruss Penny
emeriks
emeriks 25.07.2018 um 08:23:17 Uhr
Goto Top
Zitat von @Penny.Cilin:
schonend für den Prozessor ?
Hast Du bedenken, daß der Prozessor sich zu schnell abnutzt?
Ooch, dieser Punkt ist gar nicht mal so dumm, wie man jetzt vielleicht meinen würde. Eine CPU kann keine "Pause" machen. Sie tut immer irgendwas. Und mir sind auch schon "Pausen-Konstrukte" untergekommen, die mal eben so 10-20% CPU-Dauerlast erzeugt haben. Alles eine Frage der Technik ...
Penny.Cilin
Penny.Cilin 25.07.2018 um 09:26:50 Uhr
Goto Top
Zitat von @emeriks:

Zitat von @Penny.Cilin:
schonend für den Prozessor ?
Hast Du bedenken, daß der Prozessor sich zu schnell abnutzt?
Ooch, dieser Punkt ist gar nicht mal so dumm, wie man jetzt vielleicht meinen würde. Eine CPU kann keine "Pause" machen. Sie tut immer irgendwas. Und mir sind auch schon "Pausen-Konstrukte" untergekommen, die mal eben so 10-20% CPU-Dauerlast erzeugt haben. Alles eine Frage der Technik ...
Dann würde ich empfehlen, den Rechner gar nicht erst einzuschalten, dann hält der Prozesor länger...
Außerdem
  • kein Virenbefall
  • guter Datenschutz
  • ...
blacksun
blacksun 07.08.2018 um 13:15:02 Uhr
Goto Top
natürlich wäre es besser den Prozess nicht starten zu lassen, aber es handelt sich um einen Terminalserver mit Citrix. Deshalb sind auf diesem immer mehrere Sitzungen angemeldet, und in jeder Sitzung läuft der Prozess. Beim einen soll der Prozess laufen, in einer anderen Sitzung (=meine) nicht.

der Prozess lässt sich nicht per Kommandozeile ansprechen (und so etwa beenden), sondern nur per GUI.

taskkill will den Prozess anders beenden als tskill.
Taskkill --> Zugriff verweigert
tskill --> funktioniert, beendet im Userkontext

Mit Prozessor schonen meine ich dass die Schleife die CPU nicht auf 100% hält.
Wenn die Art der CPU entscheidend ist: 2x Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz

OS: Windows Server 2012 R2
blacksun
blacksun 07.08.2018 um 13:28:33 Uhr
Goto Top
Hallo Penny,

- W2K12R2 (geht es Dir um die vorhandenen Tools (die lassen sich i.d.R. von einem anderes OS kopieren), oder gibt es Unterschiede was ein Prozess beenden mit Taskkill, tskill, usw. angeht)
- Terminalserver ja
- Sinn, an sich soll der Prozess laufen in jeder Sitzung, nur eben in bestimmten nicht. Prozess ist aber so konstruiert dass er in regelmäßigen Abständen prüft ob er noch läuft und sich nachstartet.
Die Prüfung erfolgt auf Admin-Ebene, die Prozesse laufen aber im Userkontext in den verschiedenen Sitzungen.
Eine Einstellung dass bei bestimmten Benutzern nicht nachgestartet wird, gibt es nicht.
- mit Prozessor schonen meine ich die CPU-Auslastung niedrig halten (mir wäre nicht in den Sinn gekommen dass etwas anderes gemeint sein könnte bei einem simplen Vorhaben wie einen Prozess in Schleife töten)
- Domäne ja
- 30-40 User/Terminalserver
- Prozess: nichts von Windows selbst, sagen wir eine Art PW-Manager

Gruß
Martin