Wir sprechen hier nicht von einem Neustart/Neustart (ähnlich wie bei einer anderen Frage). Diese Frage unterscheidet zwischen der unterschiedlichen Art und Weise, wie Windows vorhandene Dateisperren bei einem Taskkill behandelt, und der Art und Weise, wie es auf ein Herunterfahren/Neustart reagiert.
Wenn icherzwungener TodBleiben die gesperrten Dateien eines Programms weiterhin gesperrt oder werden die Sperren auch aufgehoben, wenn der Prozess beendet wird?
Mit „Force Kill“ meine ich beispielsweise die Verwendung des Befehls „Taskkill“ oder „Prozessbaum beenden“ im Taskmanager.
Um es noch deutlicher zu machen: Ich spreche nicht von einem Prozess, der eine residente, nicht entfernte Hilfssperrdatei belässt, wie es beispielsweise MS Word tut. Ich spreche vom Status einer tatsächlichen exklusiven oder gemeinsam genutzten Dateisperre.
Gibt Taskkill eine Dateisperre frei? Oder bleibt die Sperre bestehen, bis ein Neustart oder eine Administratoraktion innerhalb der Computerverwaltungskonsole erfolgt?
Folgendes kann ich bestätigen: das Beenden eines 16-Bit-Prozesses, der eine exklusive Sperre setzt
Dabei wird ein kleines Konsolenprogramm verwendet, das eine exklusive Sperre für eine Datei im selben lokalen Verzeichnis vergibt. Das Programm läuft weiter, bis der Benutzer eine Taste drückt. Dann wird die Datei entsperrt. Folgendes passiert:
Wenn es in der Eingabeaufforderung gestartet und im Taskmanager beendet wird, wird die Sperre aufgehoben. Der zu beendende Prozess ist die spezifische cmd.exe, die das Programm gestartet hat. Durch das Beenden wird die Sperre aufgehoben.
Wenn es durch Klicken gestartet und anschließend durch Schließen des Fensters beendet wird, wird die Sperre aufgehoben.
Wenn Sie jedoch conhost.exe im Taskmanager anklicken und dann beenden, wird die Sperre nicht aufgehoben. In diesem Fall gibt es auch keine cmd.exe, weil darauf geklickt wurde. Die einzige Möglichkeit, es zu beenden, besteht also darin, conhost.exe oder ntvdm.exe zu beenden, in dem es ausgeführt wird. Die Sperre bleibt bis nach dem Neustart bestehen.
Wenn Sie die Datei ntvdm.exe durch Klicken im Task-Manager starten und dann beenden, wird die Sperre aufgehoben.
Die exklusive Sperre verhindert zu keinem Zeitpunkt tatsächlich das Löschen der Datei. Windows erlaubt jedoch nicht, die Datei im Explorer zu kopieren, während die Sperre aktiv ist.
Es gibt also zwei verschiedene Verhaltensweisen, je nachdem, ob die Aufgabe über die Eingabeaufforderung gestartet wird oder durch Klicken und Beenden des Conhost- oder NTVDM-Subsystems. Natürlich werden durch das Beenden des NTVDM.exe-Subsystems auch alle anderen Prozesse beendet, die im NTVDM-Thread ausgeführt werden.
Antwort1
Ja, die Sperren bleiben bestehen, aber Sie können nicht vorhersagen, wann sie vom Betriebssystem freigegeben werden. SieheLockFile()UndLockFileEx():
Wenn ein Prozess beendet wird, während ein Teil einer Datei gesperrt ist, oder wenn er eine Datei schließt, für die noch Sperren bestehen, werden die Sperren vom Betriebssystem freigegeben. Die Zeit, die das Betriebssystem zum Freigeben dieser Sperren benötigt, hängt jedoch von den verfügbaren Systemressourcen ab. Daher wird empfohlen, dass Ihr Prozess bei Beendigung alle gesperrten Dateien explizit freigibt. Wenn dies nicht geschieht, kann der Zugriff auf diese Dateien verweigert werden, wenn das Betriebssystem sie noch nicht freigegeben hat.