在执行期间删除nohup -file

问题描述 投票:7回答:4

我做了以下事情:

nohup find / &

rm nohup.out

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

nohup
4个回答
10
投票

在UNIX中删除文件有两个作用:

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

你的nohupped进程很乐意继续写入曾经被称为nohup.out的文件,但现在只知道该进程中的文件描述符。

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

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


2
投票

这是Unix上的标准行为。

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


2
投票

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

true > nohup.out

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


0
投票
cat /dev/null > nohup.out

来自here

© www.soinside.com 2019 - 2024. All rights reserved.