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