Frage

Ich habe Folgendes gemacht:

nohup find / &

rm nohup.out

Seltsamerweise lief der Nohup -Kommand weiter. Ich wartete darauf, dass eine neue Datei erstellt wird. Für meine Überraschung gab es keine solche Datei. Wohin ging der Stdout des Befehls?

War es hilfreich?

Lösung

Das Entfernen einer Datei in UNIX macht zwei Dinge:

  • Es entfernt den Verzeichniseintrag dafür.
  • Wenn keine Prozesse geöffnet sind und keine anderen Verzeichniseinträge darauf hinweisen (harte Links), wird der Raum veröffentlicht.

Ihr noHupped -Prozess schreibt gerne weiterhin in die Datei, die früher als nohup.out bezeichnet wurde, aber jetzt als nur als Dateideskriptor in diesem Prozess bezeichnet wird.

Sie können sogar einen weiteren Prozess erstellen, der einen nohup.out erstellen kann, es wird nicht die erste beeinträchtigen.

Wenn alle harten Links verschwunden sind und alle Prozesse es geschlossen haben, wird der Festplattenraum wiederhergestellt.

Andere Tipps

Wenn Sie die löschen nohup.out Datei, der Handle geht verloren und schreibt nur an den Dateideskriptor, aber wenn Sie das reinigen möchten nohup.out Datei dann dann einfach ausführen

true > nohup.out

Der Inhalt der Datei löscht jedoch nicht die Datei.

Das ist ein Standardverhalten bei UNIX.

Als Sie die Datei entfernt haben, wurde der letzte Link im Dateisystem entfernt, die Datei war jedoch noch geöffnet und daher die Ausgabe von find (in diesem Fall) wurde in Scheibenblöcke im Kernel -Pufferpool und möglicherweise sogar in die Festplatte geschrieben. Aber die Datei hatte keinen Namen. Wann find Beendet, kein Prozess oder keine Datei (Inode) in Bezug auf die Datei, so dass der Speicherplatz veröffentlicht wurde. Auf diese Weise verschwinden temporäre Dateien, die beim Erstellen eines Programms verschwinden, indem die Datei geöffnet und dann entfernt wird. (Dies setzt voraus, dass Sie keinen Namen für die Datei benötigen. Wenn Sie einen Namen für die Temporary benötigen, funktioniert diese Technik nicht.)

cat /dev/null > nohup.out

aus hier

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top