Я перебуваю на поточній ОС 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
швидше.