Se você não souber o ID do processo, terá que verificar todos processos que tenham o mesmo fd # aberto, já que os descritores de arquivos não globalmente único. Quanto menor for o fd #, mais processos o abrirão (por exemplo, no meu sistema, mesmo que o fd # tenha cerca de 30, eu ainda precisaria adivinhar entre 15 processos, e se eu estivesse procurando pelo fd # em torno de 10, então a lista teria ~ 170 processos).
O sistema de arquivos proc mostra os descritores de arquivos como links simbólicos em /proc/<pid>/fd
.
# ls -l /proc/1/fd lrwx------ 1 root root 64 Feb 12 22:10 /proc/1/fd/0 -> /dev/null lrwx------ 1 root root 64 Feb 12 22:10 /proc/1/fd/1 -> /dev/null lrwx------ 1 root root 64 Feb 12 22:10 /proc/1/fd/2 -> /dev/null l-wx------ 1 root root 64 Feb 12 22:10 /proc/1/fd/3 -> /dev/kmsg lrwx------ 1 root root 64 Feb 12 22:10 /proc/1/fd/4 -> anon_inode:[eventpoll] lrwx------ 1 root root 64 Feb 12 22:10 /proc/1/fd/5 -> anon_inode:[signalfd] lr-x------ 1 root root 64 Feb 12 22:10 /proc/1/fd/6 -> /sys/fs/cgroup/systemd/ ...etc...
Por exemplo, para procurar o fd # 5 em todos os processos:
# ls -l /proc/*/fd/5 lrwx------ 1 root root 64 Feb 12 22:10 /proc/1/fd/5 -> anon_inode:[signalfd] lrwx------ 1 root root 64 Feb 12 22:15 /proc/129/fd/5 -> socket:[6980] lrwx------ 1 root root 64 Feb 12 22:15 /proc/168/fd/5 -> socket:[7847] lrwx------ 1 root root 64 Feb 12 22:15 /proc/341/fd/5 -> anon_inode:[eventfd] lr-x------ 1 root root 64 Feb 12 22:15 /proc/342/fd/5 -> anon_inode:inotify ...etc...
A interface exata para resolver destinos de links simbólicos é readlink()
:
# readlink /proc/427529/fd/7 /home/grawity/lib/dotfiles/vim/backup/%home%grawity%.bashrc.swp