Удаление nohup-файла во время выполнения - PullRequest
7 голосов
/ 28 апреля 2009

Я сделал следующее:

nohup find / &

rm nohup.out

Как ни странно, команда nohup продолжала выполняться. Я ждал, когда будет создан новый файл. К моему удивлению такого файла не было. Куда девался стандартный вывод команды?

Ответы [ 4 ]

10 голосов
/ 28 апреля 2009

Удаление файла в UNIX делает две вещи:

  • удаляет для него запись каталога.
  • если ни у одного процесса нет открытого и никакие другие записи каталога не указывают на него (жесткие ссылки), он освобождает место.

Ваш процесс nohupped с удовольствием продолжит запись в файл, который раньше назывался nohup.out, но теперь известен как не что иное, как дескриптор файла в этом процессе.

Можно даже создать другой процесс, создающий nohup.out, он не будет мешать первому.

Когда все жесткие ссылки исчезнут и все процессы закроют его, дисковое пространство будет восстановлено.

2 голосов
/ 30 августа 2018

если вы удалите файл nohup.out, дескриптор будет потерян, и он будет записывать только в дескриптор файла, но если вы хотите очистить файл nohup.out, просто запустите этот

true > nohup.out

удалит содержимое файла, но не файл.

2 голосов
/ 28 апреля 2009

Это стандартное поведение в Unix.

Когда вы удалили файл, последняя ссылка в файловой системе была удалена, но файл все еще был открыт, и поэтому вывод find (в данном случае) был записан в дисковые блоки в пуле буферов ядра, и возможно даже на диск. Но у файла не было имени. При выходе из find процесс или файл (inode) не ссылались на файл, поэтому пространство было освобождено. Это один из способов создания временных файлов, которые исчезают при выходе из программы - открыв файл, а затем удалив его. (Это предполагает, что вам не нужно имя для файла; ясно, что если вам нужно имя для временного, этот метод не будет работать.)

0 голосов
/ 26 апреля 2019
cat /dev/null > nohup.out

из здесь

...