13

我做了以下事情:

nohup find / &

rm nohup.out

奇怪的是, nohup 命令继续运行。我等待创建一个新文件。令我惊讶的是,没有这样的文件。命令的标准输出到哪里去了?

4

4 回答 4

12

在 UNIX 中删除文件有两件事:

  • 它删除它的目录条目。
  • 如果没有进程打开它并且没有其他目录条目指向它(硬链接),它会释放空间。

您的 nohupped 进程将很乐意继续写入以前称为 nohup.out 的文件,但现在该文件只被称为该进程中的文件描述符。

你甚至可以让另一个进程创建一个 nohup.out,它不会干扰第一个进程。

当所有的硬链接都消失了,并且所有的进程都关闭了它,磁盘空间将被恢复。

于 2009-04-28T06:58:20.367 回答
9

如果你要删除nohup.out文件,句柄将丢失,它只会写入文件描述符,但如果你想清理nohup.out文件然后运行这个

true > nohup.out

它将删除文件的内容,但不会删除文件。

于 2018-08-30T09:10:35.420 回答
3

这是 Unix 上的标准行为。

当您删除文件时,文件系统中的最后一个链接被删除,但文件仍然打开,因此find(在这种情况下)的输出被写入内核缓冲池中的磁盘块,甚至可能写入磁盘。但该文件没有名称。退出时find,没有进程或文件(inode)引用该文件,因此释放了空间。这是创建程序退出时将消失的临时文件的一种方法 - 通过打开文件然后将其删除。(这假定您不需要文件的名称;显然,如果您需要临时文件的名称,则此技术将不起作用。)

于 2009-04-28T06:58:47.713 回答
1
cat /dev/null > nohup.out

这里

于 2019-04-26T07:21:28.320 回答