题
我做了以下操作:
nohup find / &
rm nohup.out
奇怪的是,Nohup -Command继续运行。我正在等待创建一个新文件。令我惊讶的是,没有这样的文件。该命令的阶段去了哪里?
解决方案
在Unix中删除文件有两件事:
- 它删除了目录条目。
- 如果没有进程打开,并且没有其他目录条目指向它(硬链接),它将释放空间。
您的Nohuppped过程将很乐意继续写入以前称为Nohup.out的文件,但现在被称为该过程中的文件描述符。
您甚至可以让另一个过程创建一个NOHUP。out,它不会干扰第一个。
当所有硬链路都消失了,并且所有过程都关闭了它,将恢复磁盘空间。
其他提示
如果您删除 nohup.out
文件,句柄将丢失,它将仅写入文件描述符,但如果要清理 nohup.out
文件然后运行此
true > nohup.out
它将删除文件的内容,但不会删除文件的内容。
这是UNIX上的标准行为。
当您删除文件时,文件系统中的最后一个链接已删除,但该文件仍打开,因此输出 find
(在这种情况下)将其写入内核缓冲池中的磁盘块,甚至可能是磁盘。但是文件没有名称。什么时候 find
退出,没有引用文件的过程或文件(inode),因此释放了空间。这是通过打开文件然后删除该文件时将消失的临时文件将消失的一种方式。 (这假定您不需要文件的名称;显然,如果您需要临时名称,则此技术将无法正常工作。)
cat /dev/null > nohup.out
从 这里
不隶属于 StackOverflow