Suppression du fichier nohup pendant l'exécution
-
18-09-2019 - |
Question
J'ai fait ce qui suit:
nohup find / &
rm nohup.out
Curieusement, la Command NoHup a continué à courir. J'ai attendu une création d'un nouveau fichier. Pour ma surprise, il n'y avait pas de tel fichier. Où est passée le stdout de la commande?
La solution
La suppression d'un fichier dans Unix fait deux choses:
- Il supprime l'entrée du répertoire pour cela.
- Si aucun processus ne l'a ouvert et qu'aucune autre entrée de répertoire ne le pointe (liens durs), il libère l'espace.
Votre processus NoHupped continuera volontiers à écrire dans le fichier qui s'appelait NoHup.out, mais n'est maintenant connu comme un descripteur de fichiers dans ce processus.
Vous pouvez même avoir un autre processus à créer un noHup.out, il n'interférera pas avec le premier.
Lorsque tous les liens durs sont partis et que tous les processus l'ont fermé, l'espace disque sera récupéré.
Autres conseils
Si vous supprimez le nohup.out
Fichier, la poignée sera perdue et il n'écrira que dans le descripteur de fichier, mais si vous souhaitez nettoyer le nohup.out
fichier puis exécutez-le
true > nohup.out
Il supprimera le contenu du fichier mais pas le fichier.
C'est un comportement standard sur Unix.
Lorsque vous avez supprimé le fichier, le dernier lien du système de fichiers a été supprimé, mais le fichier était toujours ouvert et donc la sortie de find
(Dans ce cas) a été écrit sur des blocs de disque dans le pool de tampons du noyau, et peut-être même au disque. Mais le fichier n'avait pas de nom. Lorsque find
Sortie, aucun processus ou fichier (inode) a référencé le fichier, donc l'espace a été libéré. C'est une façon dont les fichiers temporaires disparaîtront lors de la création d'un programme - en ouvrant le fichier, puis en le supprimant. (Cela suppose que vous n'avez pas besoin d'un nom pour le fichier; clairement, si vous avez besoin d'un nom pour le temporaire, cette technique ne fonctionnera pas.)
cat /dev/null > nohup.out
de ici