Справочная информация: я играю с мониторингом ulimit для запуска процессов для конкретного пользователя. (Я иногда видел процессы, которые начинались с неправильного лимита.) Я попросил пару самоотверженных Linux-гуру, и один предложил lsof -p <pid>
, в то время как другой предложил ls /proc/<pid>/fd
, но ни один из них не был положительным, что более точно отражает фактическое количество к максимальному лимит открытых файлов для процесса.
Итак, что это?
lsof -p <pid> | wc -l
Или
ls /proc/<pid>/fd | wc -l
Пожалуйста, уточните разницу. Благодарность!
lsof
справочные страницы, и, хотя я подозревал, что ответом являются файлы с отображением в памяти, я хотел получить подтверждение более опытного человека.Ответы:
lsof
также предоставит вам отображенные в памяти .so-файлы - что технически не совпадает с дескриптором файла, над которым приложение имеет контроль./proc/<pid>/fd
является точкой измерения для дескрипторов открытого файла - однако: упоминается на странице proc-man - если основной поток многопоточной программы завершился, этот каталог будет недоступен.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.