Назад | Перейти на главную страницу

Выясните, у кого находится fd одного удаленного файла?

В настоящее время я запускаю программу Java, которая вызывает некоторую библиотеку C ++, и я обнаружил, что после удаления некоторых файлов в каком-то потоке все еще хранится fd, например

3515991655    0 lr-x------   1 user     group         64 Jul 29 10:52 /proc/81263/fd/658 -> /path/to/file.suffix\ (deleted)

я могу использовать lsof чтобы узнать, какой процесс содержит FD (для чтения) и может узнать идентификатор потока, но я все еще не выяснил, какой код содержит FD.

мой вопрос: есть ли способ узнать стек, в котором хранится открытый FD? чтобы я мог узнать, что код приводит к проблеме

Вы можете присоединиться к процессу с помощью gdb и проверим стек таким образом:

gdb /proc/81263/exe 81263
(gdb) bt
#0  0x00007f73808279a4 in __GI___nanosleep (requested_time=0x7ffef777b730, remaining=0x0)
    at ../sysdeps/unix/sysv/linux/nanosleep.c:28
#1  0x000055c7acccca44 in ?? ()
#2  0x000055c7acccc840 in ?? ()
#3  0x000055c7accc9aac in ?? ()
#4  0x00007f7380764b97 in __libc_start_main (main=0x55c7accc98d0, argc=2, argv=0x7ffef777b8f8, init=<optimized out>, 
    fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffef777b8e8) at ../csu/libc-start.c:310
#5  0x000055c7accc9b9a in ?? ()