首先,我提前道歉,我不知道如何提供一个可重复的示例,因为我不确定是什么导致了这个问题。我会提供尽可能多的细节。我在macOS Catalina 10.15.7,使用R 4.1.0,和RStudio 1.4.1717。
我正在使用一组自定义R函数和脚本,其中一些涉及创建和写入日志文件,几乎总是logfile.txt或类似的东西。在删除旧日志文件之前,脚本包含以下行:
system("touch logfile.txt; rm logfile.txt")
使用以下结构的命令编写输出:
system(paste0('echo "Some output ', variable, ' here" >> logfile.txt'))
最后,其中一个脚本使用flock包来防止在某些并行段中同时写入:
intro.lock = flock::lock("logfile1.txt")
在写入输出后2行后解锁:
flock::unlock(intro.lock)
我的问题是,大多数时候,这些日志文件创建是不可能删除的,即使是那些不使用flock。每当我尝试删除它们时,我都会得到错误提示:"操作无法完成,因为所需的项正在使用中。"查看图片:错误信息
我试过的步骤:
- 退出RStudio和所有其他可能正在使用该文件的应用程序
- 通过带
[sudo] rm logfile.txt
的终端删除文件。得到rm: logfile.txt: Resource busy
- 在生成日志文件的每个脚本中运行
system(paste0("chflags -R nouchg,noschg logfile.txt"))
- 使用"获取信息"查看文件是否被锁定(没有)
- 检查
lsof +D ./
是否有使用这些文件的进程。
我所知道的唯一解决方案,使这些文件能够被删除是重新启动我的整个计算机。重新启动后,它们可以用任何方法删除,甚至只是拖到垃圾桶。
任何可能的解决方案都是非常感谢的。
不确定这是否会解决您的问题,但在我的一个脚本中,我使用以下命令来清理在运行结束时"留下"的特定文件:
rm(list = ls())
gc()
system("rm -R /tmp/Rtmp*")
system("rm -R /tmp/lib*.so")