Удаление файла nohup во время исполнения

StackOverflow https://stackoverflow.com/questions/796542

  •  18-09-2019
  •  | 
  •  

Вопрос

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

nohup find / &

rm nohup.out

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

Это было полезно?

Решение

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

  • Это удаляет запись в каталоге для него.
  • Если ни один процессы не открывают его, и на него нет других записей каталогов (жесткие ссылки), это выпускает пространство.

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

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

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

Другие советы

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

true > nohup.out

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

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

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

cat /dev/null > nohup.out

из здесь

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top