【发布时间】:2010-10-22 05:52:52
【问题描述】:
我做了以下事情:
nohup find / &
rm nohup.out
奇怪的是,nohup 命令继续运行。我等待创建一个新文件。令我惊讶的是,没有这样的文件。命令的stdout去哪了?
【问题讨论】:
标签: nohup
我做了以下事情:
nohup find / &
rm nohup.out
奇怪的是,nohup 命令继续运行。我等待创建一个新文件。令我惊讶的是,没有这样的文件。命令的stdout去哪了?
【问题讨论】:
标签: nohup
在 UNIX 中删除文件有两件事:
您的 nohupped 进程将很乐意继续写入以前称为 nohup.out 的文件,但现在在该进程中只知道一个文件描述符。
你甚至可以让另一个进程创建一个 nohup.out,它不会干扰第一个。
当所有的硬链接都没有了,所有的进程都关闭了它,磁盘空间就会被回收。
【讨论】:
如果您要删除 nohup.out 文件,句柄将丢失,它只会写入文件描述符,但如果您想清除 nohup.out 文件,则只需运行此文件
true > nohup.out
它会删除文件的内容,但不会删除文件。
【讨论】:
这是 Unix 上的标准行为。
当您删除文件时,文件系统中的最后一个链接已删除,但文件仍处于打开状态,因此find(在这种情况下)的输出被写入内核缓冲池中的磁盘块,并且甚至可能写入磁盘。但该文件没有名称。当find退出时,没有进程或文件(inode)引用该文件,所以空间被释放。这是创建程序退出时将消失的临时文件的一种方法 - 通过打开文件然后将其删除。 (这假定您不需要文件的名称;显然,如果您需要临时文件的名称,则此技术将不起作用。)
【讨论】:
find 不会那样做。
cat /dev/null > nohup.out
来自here
【讨论】: