Wie beendet Windows genau einen Prozess?

10

Ich bin nicht vertraut damit, wie Prozesse in Windows beendet werden. Unter Linux sendet ein "warmer" Kill ein Signal (15), das der Prozess durch Instanziieren eines Signalhandlers verarbeiten kann. Ein Cold Kill ist das Signal (9), das das Betriebssystem verarbeitet, indem es den Prozess gewaltsam beendet.

Wie kann ich einen Prozess in Windows "beenden"? Wie wird es vom Betriebssystem und vom Prozess gehandhabt? Welche Aktionen führt das Betriebssystem aus? Gibt es eine plattformübergreifende Möglichkeit, auf eine Kill / Close-Anfrage zu antworten?

IttayD
quelle
1
Für Leser: Signal 15 ist SIGTERM, 9 ist SIGKILL.
user1686
Bitte akzeptieren Sie eine Antwort, wenn Ihre Frage beantwortet wurde.
Oliver

Antworten:

11

"Task beenden" (und taskkill) wird angezeigt, um eine WM_CLOSENachricht an die Programmfenster zu senden. (Dasselbe geschieht, wenn Sie auf die ×Schaltfläche "Schließen" klicken .) Wenn das Programm nach einiger Zeit nicht beendet wird, wird der Benutzer aufgefordert, das Programm zwangsweise zu beenden.

"Kill Process" und taskkill /fverwenden TerminateProcess().

user1686
quelle
1
+1, WM_CLOSE an App gesendet; Nachdem X den Benutzer aufgefordert hat, das Beenden zu erzwingen, entfernt Windows den Prozess aus dem Scheduler, schließt alle Handles (was den Prozess auslösen kann, wenn der Kernel eines dieser Handles verarbeitet) und beansprucht dann den Speicherplatz zurück (dies ist die wirklich kurze Version des Prozesses).
Chris S
Der dritte Weg ist ntsd -p <pid> -c q, der den ntsdDebugger verwendet; Ich bin mir nicht sicher, was passiert, wenn ein Programm auf diese Weise beendet wird. ( stupst @Chris an )
user1686
5
Was passiert, wenn das Programm kein Fenster hat?
IttayD
1
@IttayD: Dann gibt es im Task-Manager keinen Eintrag, für den "Task taskkillbeenden " verwendet werden könnte :) Ich habe es gerade versucht und es antwortet mit: "Dieser Prozess kann nur mit Gewalt beendet werden (mit / F-Option)." Also ja, die einzige Wahl ist TerminateProcess().
user1686
1
@IttayD: Beachten Sie, dass unter Windows Dienste (Daemons) anders geschrieben sind als Benutzeranwendungen. Sie können Statusabfragen und Steuerungsanforderungen von Service Manager empfangen, sodass ein ordnungsgemäßer Stopp möglich ist.
user1686
0

Sysinternals (jetzt Teil von Microsoft) bietet ein Dienstprogramm namens pskill an, mit dem über die Befehlszeile Prozesse auf dem lokalen System oder auf Remote-Systemen abgebrochen werden können.

Die übliche Methode zum Beenden von Prozessen in Windows in einer GUI-Umgebung ist die Verwendung des Task-Managers.

Bis auf weiteres angehalten.
quelle
-1

Mit Cygwin kannst du einen plattformübergreifenden Kill verwenden!

Tony Roth
quelle