web-dev-qa-db-fra.com

Sous Windows, comment puis-je demander gracieusement à un programme en cours de se terminer?

Sous Unix ou Linux, il est facile de demander à une application en cours d'exécution de se terminer: vous lui envoyez le signal SIGTERM. Si son ID de processus est 1234, vous pouvez simplement exécuter kill 1234 ou kill -s TERM 1234 ou kill -15 1234.

Comment puis-je faire la même chose sous Windows?

Si je me souviens bien, la fonctionnalité "Fin de tâche" du Gestionnaire des tâches (et non la fonctionnalité "Fin du processus") faisait ce que je voulais. Mais à partir de Windows 8.1, ce n’est plus aussi doux; lorsque j'utilise cette fonctionnalité, cela me fait perdre des données non sauvegardées.

Je ne veux pas écrire de code pour faire ça. Si je le faisais, je demanderais sur Stack Overflow. :)

12
unforgettableid

taskkill.exe

Andy E écrit que vous pouvez utiliser taskkill.exe.

Pour mettre fin au processus avec l'ID de processus 1234:

taskkill /pid 1234

Pour terminer notepad.exe:

taskkill /im notepad.exe

Pour plus d'aide:

taskkill /?

Il ajoute:

Le commutateur /f forcerait la suppression, mais son utilisation ne ferait que renvoyer le signal de fin pour que l'application se ferme normalement.

Il a raison. J'ai essayé d'utiliser taskkill.exe (sans /f) pour terminer le Bloc-notes, et cela a fonctionné comme prévu. Le Bloc-notes m'a demandé si je voulais ou non sauvegarder le texte non enregistré dans lequel j'avais entré.

J'utilise la version familiale de Windows 8.1. Il semble que taskkill.exe soit fourni avec Windows sans frais supplémentaires. C'est dans c:\windows\system32.

Ou simplement déconnecter

Si vous ne voulez pas vous embêter avec cela, déconnectez-vous simplement de votre compte d'utilisateur Windows, puis reconnectez-vous.

Applications de la console

En ce qui concerne les applications de la console (par exemple PowerShell), Chris Becke ajoute :

Il n’existe aucun moyen réel de fermer les applications de console avec élégance sous Windows. Ils doivent prendre en charge une sorte de mécanisme de fermeture gracieux.

14
unforgettableid

Vous pouvez utiliser rmlogotest.exe (l'outil de test du logo Restart Manager). Cet utilitaire gratuit, écrit par Microsoft, fait partie du kit de certification des applications Windows.

Pour obtenir la dernière version du kit de certification des applications Windows, téléchargez et exécutez le programme d'installation du SDK Windows. (Vous pouvez rechercher le dernier programme d'installation du SDK Windows en effectuant une recherche Google.) Désélectionnez toutes les cases, à l'exception de la case Kit de certification des applications Windows. Attendez que le kit soit téléchargé et installé. Si je me souviens bien, le kit contient quelques centaines de mégaoctets.

rmlogotest.exe sera probablement dans C:\Program Files (x86)\Windows Kits\10\App Certification Kit si vous utilisez la version 10 du SDK Windows.

Ouvrez une invite de commande. Passez au bon répertoire. Entrez rmlogotest puis un espace puis le numéro d'identification du processus.

Si le processus est "informé du redémarrage du gestionnaire", rmlogotest le relancera gracieusement et vous indiquera "Validation du logo réussie". Sinon, rmlogotest lui demandera de se terminer gracieusement, puis pourra vous indiquer "Logo Validation Failed".

J'ai essayé d'utiliser rmlogotest.exe pour mettre fin au Bloc-notes et cela a fonctionné comme prévu. Le Bloc-notes m'a demandé si je voulais ou non sauvegarder le texte non enregistré dans lequel j'avais entré.

(Si vous vous demandez ce que est et ce que fait Restart Manager, laissez-moi vous expliquer. Restart Manager fait partie de Windows et est utilisé par Windows Installer 4.0 et versions ultérieures. Lorsque Windows Installer doit écraser ou supprimer un fichier ouvert, il utilise trois étape processus. Il demande à Restart Manager de terminer en douceur le processus utilisant le fichier. Il écrase le fichier, puis indique à Restart Manager de redémarrer le processus.)

4
unforgettableid

GnuWIN32 a les ports Windows d'utils linux communs, y compris kill.exe

http://gnuwin32.sourceforge.net/

Il supporte les signaux suivants par nom ou par un numéro

λ kill -l                                                                                                                                                                                                                                                                
INT                                                                                                                                                                                                                                                                      
ILL                                                                                                                                                                                                                                                                      
FPE                                                                                                                                                                                                                                                                      
KILL                                                                                                                                                                                                                                                                     
SEGV                                                                                                                                                                                                                                                                     
TERM                                                                                                                                                                                                                                                                     
CHLD                                                                                                                                                                                                                                                                     
ABRT             
0
teknopaul