Проверить по PID наличие файлового дескриптора в /proc

Проверить по PID наличие файлового дескриптора в /proc

11.04.2017 10:25:51 Просмотров 27 Источник

Пока не пойму с какой стороны подойти. Есть pid процесса. Мне нужно в /proc/PID/fd проверить есть ли на текущий момент обращение к файлу test.txt и если есть, то сделать kill PID.

Как получить true или false для результата ls -l /proc/PID/fd/ если в результате присутствует (или нет) обращение к файлу test.txt ?

Такой вариант мне кажется не совсем красивым :

 ls -l /proc/PID/fd | grep test.txt | wc -l
У вопроса есть решение - Посмотреть?

https://ru.stackoverflow.com/questions/652188/%d0%9f%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%b8%d1%82%d1%8c-%d0%bf%d0%be-pid-%d0%bd%d0%b0%d0%bb%d0%b8%d1%87%d0%b8%d0%b5-%d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2%d0%be%d0%b3%d0%be-%d0%b4%d0%b5%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82%d0%be%d1%80%d0%b0-%d0%b2-proc#comment933418_652188
Дело в том, что мне не нужно открывать файл. Смысл всей этой карусели в нахождении нужного PID процесса, который использует конкретный файл. И если этот файл есть в /proc/../fd, то по убить процесс по этому PID
https://ru.stackoverflow.com/questions/652188/%d0%9f%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%b8%d1%82%d1%8c-%d0%bf%d0%be-pid-%d0%bd%d0%b0%d0%bb%d0%b8%d1%87%d0%b8%d0%b5-%d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2%d0%be%d0%b3%d0%be-%d0%b4%d0%b5%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82%d0%be%d1%80%d0%b0-%d0%b2-proc#comment933432_652188
Нет lsof. Если бы был конечно я бы не придумывал
https://ru.stackoverflow.com/questions/652188/%d0%9f%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%b8%d1%82%d1%8c-%d0%bf%d0%be-pid-%d0%bd%d0%b0%d0%bb%d0%b8%d1%87%d0%b8%d0%b5-%d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2%d0%be%d0%b3%d0%be-%d0%b4%d0%b5%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82%d0%be%d1%80%d0%b0-%d0%b2-proc#comment933465_652188
Да скорее также работает lsof

Ответы - Проверить по PID наличие файлового дескриптора в /proc / Проверить по PID наличие файлового дескриптора в /proc

Является ответом!
aleksandr barakin

11.04.2017 10:53:06

более надёжно будет воспользоваться опцией -lname программы find:

$ find /proc/номер/fd -lname /полный/путь/к/test.txt

или, если вам не важен путь, а важно только имя файла:

$ find /proc/номер/fd -lname \*/test.txt
Закрыть X