加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在应用程序退出之前删除所有文件

发布时间:2020-12-16 09:40:24 所属栏目:百科 来源:网络整理
导读:我正在研究一些代码,它是工具的后端.此工具在固定目录中创建其所有输出.现在假设客户端想要杀死其所有应用程序,那么应该删除所有文件.所以我使用系统命令(rm -rf)删除目录,但是没有删除打开的文件,因此也不会删除该目录.我怎么能聪明地做到这一点? 一个选项
我正在研究一些代码,它是工具的后端.此工具在固定目录中创建其所有输出.现在假设客户端想要杀死其所有应用程序,那么应该删除所有文件.所以我使用系统命令(rm -rf)删除目录,但是没有删除打开的文件,因此也不会删除该目录.我怎么能聪明地做到这一点?

一个选项似乎是使用一个表来维护所有打开的文件,然后在目录上触发rm -rf之前将它们全部关闭.但是,这可能会降低整个应用程序的速度.

我探索的另一个选项是使用lsof查找打开文件的列表,并在rm -rf之前将它们全部关闭.

我的问题的另一个限制是我在一个进程中打开了几个不同的文件,其中一个正由另一个进程使用.使用上述方法,如果我关闭所有文件描述符并尝试删除目录,逻辑上不应删除它,因为还有另一个进程打开的文件.

任何建议,将不胜感激.

解决方法

我认为使用脚本对你的实例来说是一个好主意,而Coren的答案是准确的.话虽这么说,我看到程序只是遍历大量的文件描述符来关闭所有这些.如果你有超过你循环的范围,它有可能出错,但如果你打算关闭所有的描述符,只要它们在这个限制范围内,这样的事情不应该伤害应用程序:

for (int i = 0; i < 4096; i++) {
    close(i);
}

为了在应用程序退出之前完成此操作,您可以设置信号处理程序,如Coren所述和链接.确保在信号处理程序中使用尽可能少的信号和处理程序,即只设置一个标志并让程序进行清理.

编辑:另外,来自StackOverflow上另一篇文章的this answer给出了两个如何执行此操作的示例(#3类似于Coren,用于Linux),但也有一些指向实际源代码的链接来处理这些内容.你可能想看一下!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读