En particulier, je veux savoir ce qui se passe lorsque je rends un fichier ouvert et que je ne tue pas explicitement le processus qui détient le descripteur de fichier de ce fichier. Le fichier sera-t-il supprimé lors de l'arrêt du système ?
Réponses
Trop de publicités?En gros, oui, dès que le processus qui le maintient ouvert meurt. Rien de "magique" ne se produit à ce moment-là. De la même manière qu'une entrée de répertoire pour le fichier est un "lien dur" vers les blocs qui contiennent les données de ce fichier, il en est de même pour un identifiant de fichier ouvert. S'il n'y a pas d'entrée de répertoire ni d'identifiant de fichier ouvert, les blocs sont libres d'être réutilisés. Cela signifie que même si vous n'effectuez pas un arrêt complet (par exemple en tirant sur le cordon d'alimentation), le fichier sera quand même supprimé - il a été "supprimé" lorsque vous avez exécuté rm, mais ses blocs n'étaient pas immédiatement disponibles pour être réutilisés.
Le noyau maintient une copie de l'inode du fichier en mémoire verrouillée afin que les blocs de données appartenant à ce fichier et à l'inode ne puissent pas être libérés pendant qu'un processus a le fichier ouvert. Une fois que le fichier est définitivement fermé (comme cela se produit lorsque le système est arrêté et que le processus est tué), tous les blocs et l'inode sont libérés pour être réutilisés. Cela se produit avant que le système de fichiers puisse être démonté (il ne peut pas être démonté s'il a des fichiers ouverts) et que le système soit arrêté.