In Windows, i blocchi dei file rimangono dopo che un processo è stato terminato tramite taskkill?


2

Non stiamo parlando di un riavvio / riavvio qui (simile a un'altra domanda). Questa domanda distingue il diverso modo in cui Windows gestisce i blocchi di file esistenti su un taskkill rispetto al modo in cui risponde a un arresto / riavvio.

Se forzo l'uccisione di un programma, i file che ha bloccato rimarranno comunque bloccati o verranno rilasciati i blocchi quando anche il processo termina?

Per uccisione forzata, intendo come usare il comando 'taskkill' o 'albero del processo di fine' in taskmanager.

Per chiarire ulteriormente, non sto parlando di un processo che lascia un file di blocco ausiliario non rimosso residente, come MS Word. Sto parlando dello stato di un vero blocco di file esclusivo o condiviso.

Taskkill rilascia un filelock? O il blocco rimane attivo fino a quando non viene eseguita un'azione di riavvio o di un utente amministratore nella console di gestione del computer?

Ecco cosa posso confermare: uccidere un processo a 16 bit che inserisce un blocco esclusivo

Questo utilizza un piccolo programma console che inserisce un blocco esclusivo su un file nella stessa directory locale. Il programma rimane in esecuzione fino a quando l'utente preme un tasto e quindi sbloccherà il file. Ecco cosa succede:

  • Se lanciato al prompt dei comandi e ucciso nel taskmanager, rilascia il blocco. Il processo per uccidere è il cmd.exe specifico che ha avviato il programma. Ucciderlo rilascia il blocco.

  • Se avviato facendo clic e quindi ucciso chiudendo la finestra, il blocco viene rilasciato.

  • Tuttavia, se avviato facendo clic e quindi uccidendo il conhost.exe nel taskmanager, non rilascia il blocco. In questo caso, non esiste nemmeno cmd.exe perché è stato fatto clic. Quindi l'unico modo per ucciderlo è uccidere il conhost.exe o ntvdm.exe in cui è in esecuzione. Il blocco rimane in posizione fino a dopo il riavvio.

  • Se avviato facendo clic e quindi uccidendo ntvdm.exe in taskmanager, rilascia il blocco.

  • In nessun momento il blocco esclusivo impedisce effettivamente l'eliminazione del file. Tuttavia, Windows non consente di copiare il file in Explorer mentre è attivo il blocco.

Quindi, due comportamenti diversi a seconda che l'attività venga avviata tramite il prompt cmd o facendo clic e uccidendo il sottosistema conhost o ntvdm. Ovviamente, uccidere il sottosistema ntvdm.exe uccide anche qualsiasi altro processo assegnato nel thread ntvdm.


Sono d'accordo, le domande sono leggermente diverse. Tuttavia, le informazioni fornite da superuser.com/a/918448/401839 rispondono a entrambe le domande. Il motivo per cui Windows funziona in questo modo al riavvio è fondamentalmente il motivo per cui Windows funziona in questo modo al termine di un programma.
TOOGAM,

Se si annulla un processo, quel processo che aveva un blocco file non esiste più. Quindi non c'è nulla per bloccare il file.
Ramhound,

Risposte:


4

Sì, i blocchi rimangono ma non è possibile prevedere quando verranno rilasciati dal sistema operativo. Vedi LockFile () e LockFileEx () :

Se un processo termina con una parte di un file bloccato o chiude un file con blocchi in sospeso, i blocchi vengono sbloccati dal sistema operativo. Tuttavia, il tempo impiegato dal sistema operativo per sbloccare questi blocchi dipende dalle risorse di sistema disponibili. Pertanto, si consiglia che il processo sblocchi esplicitamente tutti i file bloccati al termine. In caso contrario, l'accesso a questi file potrebbe essere negato se il sistema operativo non li ha ancora sbloccati.


Questo è stato utile. Perché nel nostro caso, il sistema non rilascerà mai fino al riavvio. Quindi "dipende dalle risorse di sistema disponibili" significa davvero "non contare su di esso" :) E questo spiega alcune cose.
Il coordinatore

@SaintHill: La domanda è: perché stai uccidendo così tante attività che mantengono i blocchi con taskkill (o stai facendo così spesso anche con alcune attività) che questo sta diventando un grosso problema?
Karan,

perché il nostro server web genera un processo di database speciale che viene eseguito e quindi restituisce una query speciale. Solo uno può essere eseguito contemporaneamente e blocca anche diversi file quando viene eseguito. Ma se è scaduto, allora dobbiamo ucciderlo. Quindi il server web lo uccide "taskkill" e quindi ... il sistema operativo spesso non rilascia i blocchi. E molti altri processi condividono anche quei blocchi di database. Quindi ... dovremo cercare una soluzione migliore a questo problema. Almeno ora capiamo le specifiche.
Il coordinatore

@SaintHill: capito. Sì, dovrai sicuramente ripensare il processo.
Karan,

Quindi cosa succede se il file è bloccato su una condivisione di rete?
Il coordinatore
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.