Как избежать дублирования имен подключений? (32) Соединение «Auto Ethernet» уже активно на enpXXX

Вы можете использовать API fanotify для прослушивания всех открытий файлов в данной файловой системе. Информация предоставляется в виде потока структур событий, которые включают дескриптор файла, который предоставляет имя открываемого файла и идентификатор процесса запрашивающей стороны.

Ваша программа может разрешить или отклонить открытие, что означает, что она может искать pid в / proc , чтобы найти команду и пользователя, выполняющего открытие, прежде чем разрешить его продолжение, без возможности состояние гонки.

На странице руководства fanotify (7) представлена ​​полная программа на C для получения событий и обработки открытых запросов, поэтому вам просто нужно добавить несколько дополнительных строк, чтобы получить нужные данные из / proc . Обратите внимание: вы получите события для всех файлов во всей точке монтирования, поэтому проверьте свой код на специально смонтированной небольшой файловой системе.

Команда fatrace показывает, как получить часть этой информации в простом тесте. Например, скопируйте / bin / bash в / tmp / bash , затем напишите небольшой скрипт ~ / test2 с

#!/tmp/bash
pwd

и запустите fatrace только в файловой системе / tmp (при условии, что это отдельное монтирование tmpfs) с помощью параметра -c для прослушивания файловой системы текущего каталога и -f O для прослушивания открытий:

cd /tmp
sudo fatrace -c -f O

Теперь, когда вы запустите

sh -c 'echo $$; ~/test2'
expect -c 'spawn /home/meuh/test2'
~/test2

, вы должны увидеть зарегистрированный

sh(7360): RO /tmp/bash
expect(7414): RO /tmp/bash
bash(7590): RO /tmp/bash

2
06.07.2015, 09:39
0 ответов

Теги

Похожие вопросы