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