如果在 Linux 中删除日志文件(例如 nohup.out),而它仍然是正在运行的作业(以及进一步的输入)的主题,那么数据会发生什么?
例如
脚本
#!/bin/bash
while [ 1 ]
do
fortune
done
然后...
# nohup ./script.sh &
这默认将日志输出到nohup.out。
甚至
# ./script.sh > nohup.out &
问题是:如果删除了 nohup.out,会发生什么?假设作业继续,文件真的消失了吗?如果 script.sh 生成了足够的数据来填满磁盘,会发生什么?这是否会创建重定向到 /dev/null 的事实状态?
从背景来看,我发现之前用这种方法启动的一个进程在很长一段时间内都无法重新启动,但据我估计,在维护窗口之前磁盘会填满。这种情况将来会避免,我只是好奇,一个仍需重定向的未链接文件会发生什么。
答案1
如果程序仍然打开文件句柄,我相信会发生这种情况:文件继续存在。它会从目录列表中消失,看起来好像已经消失了,但直到最后一个文件句柄关闭,文件才会继续增长。
这就是为什么人们会在文件系统上存放大量文件并出现错误,找到一个很大的错误文件,删除它,仍然有大量的磁盘空间列表,但无法再找到该文件。它就在那里。只是不太明显。使用 lsof 找到持有文件句柄的应用程序并终止/关闭该应用程序,然后空间就会被回收。