Удаление файла nohup во время исполнения
-
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
из здесь