Comment Windows tue-t-il un processus exactement?

10

Je ne connais pas la façon dont les processus sont tués dans Windows. Sous Linux, un kill "chaud" envoie un signal (15) que le processus peut gérer en instanciant un gestionnaire de signal. Un kill à froid est un signal (9) que l'OS gère en tuant le processus avec force.

Comment "tuer" un processus sous Windows? Comment est-il géré par OS et par le processus? Quelles actions le système d'exploitation effectue-t-il? Existe-t-il un moyen multiplateforme de répondre à une demande de suppression / fermeture?

IttayD
la source
1
Pour les lecteurs: le signal 15 est SIGTERM, 9 est SIGKILL.
user1686
Veuillez accepter une réponse, si votre question a été répondue.
Oliver

Réponses:

11

"Fin de tâche" (et taskkill) apparaît pour publier un WM_CLOSEmessage dans les fenêtres du programme. (La même chose se fait lorsque vous cliquez sur le bouton ×"Fermer".) Si le programme ne se ferme pas dans un certain temps, l'utilisateur est invité à terminer le programme avec force.

"Kill Process" et taskkill /futilisation TerminateProcess().

user1686
la source
1
+1, WM_CLOSE envoyé à l'application; après X fois demander à l'utilisateur de forcer la suppression, Windows supprime le processus du planificateur, ferme tous les descripteurs (ce qui peut déclencher le processus si le noyau traite l'un de ces descripteurs), puis récupère l'espace mémoire (c'est la version vraiment courte du processus).
Chris S
La troisième manière est ntsd -p <pid> -c q, qui utilise le ntsddébogueur; Je ne sais pas ce qui se passe lorsqu'un programme est tué de cette façon. ( pokes @Chris )
user1686
5
que se passe-t-il si le programme n'a pas de fenêtre?
IttayD
1
@IttayD: Ensuite, il n'y a aucune entrée dans le Gestionnaire des tâches pour utiliser "Fin de tâche" sur :) J'ai juste essayé taskkillet il répond par: "Ce processus ne peut être interrompu qu'avec force (avec l'option / F)." Alors oui, le seul choix qui reste est TerminateProcess().
user1686
1
@IttayD: Notez que sous Windows, les services (démons) sont écrits différemment des applications utilisateur; ils peuvent recevoir des requêtes d'état et des demandes de contrôle de Service Manager, de sorte qu'un arrêt gracieux est possible.
user1686
0

Sysinternals (qui fait maintenant partie de Microsoft) propose un utilitaire appelé pskill qui peut être utilisé à partir de la ligne de commande pour tuer les processus sur le système local ou sur des systèmes distants.

La manière habituelle de tuer les processus dans Windows dans un environnement GUI est d'utiliser le Gestionnaire des tâches.

En pause jusqu'à nouvel ordre.
la source
-1

avec cygwin vous pouvez utiliser un kill multi-plateforme!

Tony Roth
la source