在执行期间删除nohup -file

时间:2009-04-28 06:54:50

标签: nohup

我做了以下事情:

nohup find / &

rm nohup.out

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

4 个答案:

答案 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