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