gpt4 book ai didi

c++ - 如何以编程方式查找进程的所有文件句柄?

转载 作者:太空宇宙 更新时间:2023-11-04 07:42:23 24 4
gpt4 key购买 nike

我有一个进程“x”,它使用“system”C 函数来启动 ntpd 守护进程。我观察到 ntpd 传递了“x”的打开文件描述符。即使在删除原始文件后,ntpd 仍会保留文件描述符。例如:“x”使用的一些日志文件在一段时间后被轮换,但“ntpd”为这些删除的文件打开了文件句柄。会不会有问题?

或者我想在调用“系统”函数之前为所有文件描述符设置“FD_CLOEXEC”标志。但是由于我们作为第三个进程“x”的扩展库运行(“x”根据某些条件加载我们的库),所以没有简单的方法来了解进程已打开的所有文件描述符。一种方法是读取/proc//fd 并为每个文件句柄设置“FD_CLOEXEC”,并在“系统”函数返回后将其重置。我正在使用 Linux 2.6.16。有没有其他简单的方法可以找到所有文件处理程序?

谢谢,

最佳答案

是的,这会引起问题。在最后一个打开的文件描述符实际关闭之前,被删除文件使用的磁盘空间不会被释放以供重新使用。

理想情况下,您应确保在所有文件描述符上设置 FD_CLOEXEC;使用 POSIX 2008,您甚至可以在使用 O_CLOEXEcflags打开文件时执行此操作。但是,如果您是另一个流程的一部分并且不负责其代码,那么这一点都不容易。您的选择是蛮力和无知。您可以循环浏览所有您认为可能打开的描述符并关闭它们 - 忽略来自已经关闭的描述符的错误。那是蛮力。或者您可以忽略打开的文件,并希望系统不会卡得太厉害。也许您可以通过检查一次可以打开的文件数量来限制您的搜索。

关于c++ - 如何以编程方式查找进程的所有文件句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2481957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com