Я перебуваю на поточній ОС X 10.7. Іноді я хочу перевірити, яка програма блокує певний файл. Я це роблю
lsof | grep $FILENAME
Я помітив, що виконання цієї команди викликає два екземпляри lsof. Чому так?
Я перебуваю на поточній ОС X 10.7. Іноді я хочу перевірити, яка програма блокує певний файл. Я це роблю
lsof | grep $FILENAME
Я помітив, що виконання цієї команди викликає два екземпляри lsof. Чому так?
Відповіді:
lsofробить це внутрішньо, щоб уникнути тупикових ситуацій. Якщо йому належить виконати операцію, яка може зайти в глухий кут, вона виконує в ній допоміжний процес. Якщо операція заходить в глухий кут, це може вбити допоміжний процес. Це задокументовано в посібнику:
Lsof може бути заблокований деякими функціями ядра, які він використовує - lstat (2), readlink (2) та stat (2). Ці функції зупиняються в ядрі, наприклад, коли хости, на яких розміщені файлові системи NFS, стають недоступними.
Lsof намагається зламати ці блоки таймерами та дочірніми процесами, ...
hard,nointrРежим NFS та інших мережевих файлових систем був доданий навмисно, як це може бути корисно: він заважає програмам думати, що всі файли раптово зникли, якщо, скажімо, rootfs /був встановлений NFS і сервер на мить опустився . Там є , однак, softі intrвстановити параметри, які будуть викликати запити на тайм - аут , і зробити їх переривається.
lsof $FILENAMEшвидше.