Есть ли способ получить количество процессов, которые сопоставлены с конкретным файлом?
На самом деле, я хочу удалить файл, который используется несколькими процессами, когда все процессы не работают. Есть ли способ сделать это?
Я пробовал с fstat
вызов функции, чтобы получить количество hard links
но так как после сопоставления я закрываю файл так stat.st_nlink
всегда 0
,
Сначала вам нужно создать пул из ваших fork
, Затем вы можете получить доступ к каждому файлу, либо через жесткую ссылку, символьную ссылку и т. Д. Через struct stat
пожалуйста man 2 stat
,
Потому что вы хотите выяснить, относительный между PIDs
и файлы, которые вам нужны /proc
вам нужно : /proc/PID/stat
Я думаю, что следующий проект облегчит вашу работу:
http://brokestream.com/procstat.html
После сохранения всех файлов вашего процесса в std::tuple
, вы можете остановить ваш процесс, а затем удалить свои файлы.
Предполагая, что полный путь к файлу mmap () — / dir1 / dir2 / my_file, вы можете создать демон, который выполняет lsof /dir1/dir2/my_file
в цикле, пока не обнаружит, что ни один процесс не имеет my_file
открыт.
Предполагая, что приложения ваши, и вы можете изменить код, я бы посоветовал другой подход. Имейте одно приложение, которое запускается раньше других (может даже порождать другие процессы), и пусть это приложение создает и удаляет файл.