Im Moment versuche ich, meine Anwendung in Visual Studio auszuführen / zu debuggen, aber sie kann nicht erstellt werden, da die letzte Instanz von app.vshost.exe
noch ausgeführt wird. Dann versuche ich mit dem Task-Manager, ihn zu töten, aber er bleibt dort ohne Anzeichen von Aktivität.
Abgesehen von diesem speziellen Fall (möglicherweise ein Visual Studio-Fehler) bin ich sehr gespannt auf die technischen Gründe, warum Windows manchmal einen Prozess nicht beenden kann.
Kann ein aufklärerischer Betriebssystementwickler versuchen, dies zu erklären?
(Und bitte starte keinen Unix / Linux / Mac-Kampf gegen Windows.)
windows
process
visual-studio
kill
Néstor Sánchez A.
quelle
quelle
Antworten:
Die Ursache ist normalerweise ein nicht reagierender Treiber, der noch nicht abgeschlossene E / A- Anforderungen verarbeitet.
Siehe Mark Russinovichs Blog-Eintrag Unkillable Processes ( Archiv )
quelle
Ein möglicher Grund: Sie können eine Aufgabe, die an einen Debugger angehängt ist, nicht beenden.
Die Aufgabe kann nur vom Debugger aus gestoppt werden.
quelle
taskkill /f
, nicht mitwmic ... call terminate
... wird immer wieder "Fehler" angezeigt: Der Prozess X mit PID Y konnte nicht beendet werden Es gibt keine laufende Instanz dieser Aufgabe. "Ein Grund wäre, dass Sie nicht die Erlaubnis haben, es zu töten. ZB wenn der Prozess als Administrator ausgeführt wird und Sie ein normaler Benutzer sind.
quelle
Öffnen Sie die Seite " Eigenschaften " für das Projekt, wechseln Sie zur Registerkarte "Debuggen" und aktivieren Sie "Debuggen von nicht verwaltetem Code aktivieren". Oder deaktivieren Sie die Option zur Verwendung des Host-Prozesses.
quelle
Wenn die letzte Datei app.vshost.exe noch ausgeführt wird, stellen Sie einfach mit dem Debugger eine Verbindung zu diesem Prozess her.
Sollte im Menü unter Debug-> AttachToProcess zu finden sein, dann wählen Sie den Hängeprozess und verbinden Sie sich damit.
quelle
Meine einzige Erfahrung in der Entwicklung auf OS-Ebene war in der Grundschule, aber ich vermute, dass Folgendes (oder etwas Ähnliches) passiert:
Beim Ausführen der letzten Instanz, die der Debugger zu behandeln versuchte, ist ein Fehler aufgetreten, der jedoch durch ein anderes Problem verursacht wurde (möglicherweise wurde eine Debug-Zusicherung festgestellt, aber bevor Sie auf das Dialogfeld "Abbrechen / Wiederholen / Ignorieren" klicken konnten, wurde eine weitere Unterbrechung ausgelöst , möglicherweise aufgrund eines Nullzeigers). Nachdem Sie das Debuggen beendet haben, wartete der Debugger immer noch auf Ihre Antwort auf die erste Debug-Zusicherung, sodass der Prozess nicht beendet werden konnte. Aber dann wurde der Debugger beendet, als Sie aufhörten zu debuggen (oder taten es?) Und den Prozess in einen Zombie oder seinen Baum in Zombies verwandelten. Beim Versuch, den Zombie-Prozess zu beenden, ist ein ähnlicher Fehler aufgetreten, der Ihnen vom Task-Manager jedoch nicht mitgeteilt wurde:
Sollten Sie sich dazu entschließen, dasselbe für das übergeordnete Element zu versuchen (in meinem Fall war das übergeordnete Element der Debuggerprozess msvsmon.exe), schlägt dies auf die gleiche Weise fehl:
Das übergeordnete Element wurde von der IDE gestartet, aber die IDE hat die Nabelschnur durchtrennt, sodass Sie jetzt zwei Zombie-Prozesse haben. Sie können dem Prozess, den Sie debuggen, keinen Debugger hinzufügen, da bereits ein (Zombie-) Debugger vorhanden ist, und Sie können dem (Zombie-) Debugger keinen Debugger hinzufügen, da dies in Visual Studio angezeigt wird, wenn Sie es versuchen :
Die Zombies befinden sich immer noch in der Prozesstabelle, sodass Sie keine weitere Instanz über den Debugger ausführen können. Möglicherweise können Sie jedoch auch eine andere Instanz außerhalb der IDE starten.
Dies behebt das spezifischere Problem, dass VS einen Zombie-Prozess erstellt. Aber Zombie-Prozesse sterben oft nicht. Nun, oft unter Windows, manchmal unter Linux, bis Sie sie mit einer Schrotflinte abschießen. Oder war das eine Abschaltung? Achten Sie jedoch auf die versehentliche Anwendung ausstehender Windows-Updates.
Ich freute mich über einige der früheren Antworten, die das Anhängen des Debuggers nahe legten, aber das obige ist das Ergebnis, das ich erhielt. Also sende ich meine Antwort und starte neu, um die Prozesstabelle zu bereinigen.
quelle
Vielleicht könnte eine Prüfung einiger der hier genannten Tools zu Antworten führen?
https://stackoverflow.com/questions/49988/really-killing-a-process-in-windows
(Im Moment habe ich festgestellt, dass pskill das einzige von mehreren Tools ist, mit dem ein Prozess, der unter der Windows 7-Sitzung eines Benutzers ausgeführt wird, von der Sitzung eines anderen Benutzers (oder den Anmeldeinformationen, nehme ich an) beendet werden kann.)
quelle
Sie können!
Mit ProcessHacker (Rechtsklick auf den Prozess) -> Terminator.
quelle
Wenn Sie VS zum Debuggen verwenden und es mit dem Task-Manager beenden, kann VS nicht gut damit umgehen.
VS debuggt also immer noch den Zielprozess, aber Sie können nicht einfach auf Prozess stoppen in VS klicken. Beenden Sie einfach Ihren VS und Sie werden sehen, wie Ihr Prozess beendet wird.
quelle