Яка різниця між `lsof -p <pid> | wc -l` і `ls / proc / <pid> / fd | wc -l`?


13

Передумови: я розглядаю моніторинг доступу до запущених процесів для конкретного користувача. (Я час від часу бачив процеси, які почалися з невірним обмеженням.) Я запитав пару гуру, що самовизнавався Linux, і один запропонував lsof -p <pid>, а інший запропонував ls /proc/<pid>/fd, але жоден не був позитивним щодо того, який би точніше відображав фактичний підрахунок до макс. ліміт відкритих файлів для процесу.

Отже, що це?

lsof -p <pid> | wc -l

Або

ls /proc/<pid>/fd | wc -l

Будь ласка, докладно уточнити різницю. Дякую!


3
Звучить як домашнє завдання.
ewwhite

1
Не домашнє завдання. Додано краще пояснення. Я читав lsofсторінки чоловіка, і, хоча підозрював, що відповідь - це файли, нанесені на пам'ять, я хотів підтвердити більш досвідченої людини.
Джаред

Відповіді:


10

lsofтакож дасть вам відображення пам'яті .so-файлів, що технічно не є тим, що обробка файлів, над якою працює програма. /proc/<pid>/fdє точкою вимірювання для дескрипторів відкритого файлу - однак: згадується на сторінці Procman - якщо основний потік багатопотокової програми закінчився, цей каталог буде недоступний.

lsof -p <pid> | grep -v mem | egrep -v '^COMMAND PID' | wc -lпокаже вам ті самі елементи, що і ls /proc/<pid>/fd | wc -l.

Карти пам'яті доступні в /proc/<pid>/maps.


lsofДає майже той же результат, але він також включає в себе cwd, rtdі txtдескриптори файлів.
Ян Бамфорт

Також зауважте, що кількість пробілів між COMMANDі PIDможе змінюватися. Замініть пробіли, [[:space:]]*щоб зробити їх загальнішими.
Ян Бамфорт

Я також знайшов lsof -a -p <pid> -d ^mem -d ^cwd -d ^rtd -d ^txt -d ^DEL | wc -l тут , поки lsofв оболонці Android ( adb shell) не підтримується -aі -d. Тож я нарешті використовую версію Kvisle.
вихідні
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.