我的进程会读取文件并将其删除。这项活动发生了2000多次。
当我检查/ proc / PID / fd中的文件时,我看到那里的文件,我在每行的末尾看到(已删除)。但我看到1024条记录,其中1020条是(已删除)条目。之后,来自此PID的新文件操作失败。
要解决此问题,请继续进行调试并执行
p close(id)
此(id)取自/ proc / PID / fd上的ll输出。
想知道文件未被删除的原因。首先使用 fdclose ,然后删除文件,即使文件显示为(已删除)
答案 0 :(得分:1)
/ proc / $ PID / fd目录显示由其描述符命名的进程的所有打开文件。 / proc / $ PID / fd中的每个文件代表一个打开的文件/套接字/管道等。如果描述符属于磁盘文件,则其符号链接指向打开的文件的绝对路径。
此处,(已删除)表示该进程打开的文件已删除且磁盘上不再存在。因此,在您的情况下,问题是打开的文件在取消链接(删除)之前没有关闭。您需要在删除它之前将它们关闭,否则会泄漏文件描述符。
如果您使用C编码,请使用fclose(C标准)或关闭(POSIX)以关闭文件