Чому випуск одного lsof запускає два процеси?


1

Я перебуваю на поточній ОС X 10.7. Іноді я хочу перевірити, яка програма блокує певний файл. Я це роблю

lsof | grep $FILENAME

Я помітив, що виконання цієї команди викликає два екземпляри lsof. Чому так?


1
Порада: lsof $FILENAMEшвидше.
grawity

Дякую, але використання grep дозволяє мені знаходити відкриті файли лише за частинами його імені.
Макс Рійд

Відповіді:


4

lsofробить це внутрішньо, щоб уникнути тупикових ситуацій. Якщо йому належить виконати операцію, яка може зайти в глухий кут, вона виконує в ній допоміжний процес. Якщо операція заходить в глухий кут, це може вбити допоміжний процес. Це задокументовано в посібнику:

Lsof може бути заблокований деякими функціями ядра, які він використовує - lstat (2), readlink (2) та stat (2). Ці функції зупиняються в ядрі, наприклад, коли хости, на яких розміщені файлові системи NFS, стають недоступними.

Lsof намагається зламати ці блоки таймерами та дочірніми процесами, ...


Звучить брудний хакер: /
Макс Рід

1
Абсолютно. Це, власне, можна сказати і про NFS.
Девід Шварц

Ого, іноді мені відчайдушно цікаво, чому ми вирішили дозволити таким системам керувати нашим суспільством ...
Макс Рід,

@MaxRied: hard,nointrРежим NFS та інших мережевих файлових систем був доданий навмисно, як це може бути корисно: він заважає програмам думати, що всі файли раптово зникли, якщо, скажімо, rootfs /був встановлений NFS і сервер на мить опустився . Там є , однак, softі intrвстановити параметри, які будуть викликати запити на тайм - аут , і зробити їх переривається.
grawity

1
@MaxRied: Якщо ви почнете задавати питання на кшталт "Хто їх додасть?" і "До чого б вони їх додали?" ви починаєте бачити, що немає жодного місця, щоб це виправити. На жаль, неблокуючі операції або операції з таймаутами ніколи не були частиною стандартного API, і тому вони відсутні в цілому ланцюжку аж до інтерфейсу користувача через API файлу C, через ядро, через протокол NFS, назад до файловий сервер, а потім API файлової системи ядра сервера, який використовує код сервера NFS.
Девід Шварц
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.