В общем, это сложная проблема для решения.Вы можете спросить, является ли файл открытым , при определенных обстоятельствах;однако, если другой процесс является сценарием, он может хорошо открывать и закрывать файл несколько раз.Я настоятельно рекомендую вам использовать консультативную блокировку или какой-либо другой явный метод для взаимодействия другого процесса, когда он будет завершен с файлом.
Тем не менее, если это не вариант, есть другой способ.Если вы посмотрите в каталоги /proc/<pid>/fd
, где <pid>
- это числовой идентификатор процесса какого-либо запущенного процесса, вы увидите несколько символических ссылок на файлы, которые этот процесс открыл.Разрешения на символическую ссылку отражают режим, в котором был открыт файл - разрешение на запись означает, что он был открыт для режима записи.
Итак, если вы хотите узнать, открыт ли файл, просто просмотрите все процессы * 1009.* запись, и каждый дескриптор файла в нем, ища доступную для записи символическую ссылку на ваш файл.Если вам известен PID другого процесса, вы также можете напрямую посмотреть на запись его процесса.
Конечно, у этого есть некоторые существенные недостатки.Во-первых, вы можете видеть только открытые файлы для ваших собственных процессов, если вы не root.Это также относительно медленно, и работает только на Linux.И снова, если другой процесс открывает и закрывает файл несколько раз, вы застряли - вы можете в конечном итоге увидеть его в течение закрытого периода, и нет простого способа узнать, откроет ли он его снова.