我做了以下事情:
nohup find / &
rm nohup.out
奇怪的是,nohup -command 命令继续运行。我等待新文件被创建。但出乎意料的是,并没有这样的文件。命令的标准输出(stdout)去哪了?
我做了以下事情:
nohup find / &
rm nohup.out
奇怪的是,nohup -command 命令继续运行。我等待新文件被创建。但出乎意料的是,并没有这样的文件。命令的标准输出(stdout)去哪了?
在 UNIX 中删除一个文件会执行两个操作:
您的 nohup 进程仍然可以愉快地写入曾经被称为 nohup.out 的文件,但现在只是该进程内的一个文件描述符,无需实际文件名。
您甚至可以让另一个进程创建一个 nohup.out 文件,它不会影响第一个进程。
当所有硬链接都消失,且所有进程已经关闭该文件时,磁盘空间才会被回收。
nohup.out
文件,该句柄将丢失并且它只会写入文件描述符,但如果您想清理nohup.out
文件,只需运行以下命令:true > nohup.out
它将删除文件的内容,但不会删除文件本身。
这是Unix系统的标准行为。
当你删除文件时,文件系统中的最后一个链接被删除了,但是文件仍然打开,因此find
(在这种情况下)的输出被写入内核缓冲池中的磁盘块,可能甚至写入磁盘。但是该文件没有名称。当find
退出时,没有进程或文件(inode)引用该文件,因此释放了空间。这是创建程序退出时将消失的临时文件的一种方法-通过打开文件,然后删除它。(这假设您不需要文件名;如果您需要临时文件的名称,则此技术将无法使用。)