Я знаю, что могу использовать команду
lsof -p xxxx | wc -l
Чтобы узнать количество открытых файлов в процессе, это работает, но, однако, слишком неэффективно. У меня есть серверный процесс, у которого слишком много файлов сокетов, метод wc -l никогда не возвращает результат. Итак, каков эффективный способ узнать, сколько файлов открыто в процессе?
Спасибо.
Для открытых файлов есть интерфейс proc: / proc / PID / fd /. Это каталог символических ссылок. Все открытые сокеты будут отображаться как связанные с файлом с именем "socket: [INODE NUMBER]"
Некоторый контекст (сценарии использования) может дать лучшее направление для ответов.
Документация lsof описывает несколько вызываемых им методов, которые могут блокироваться на нежелательное время. Я бы посоветовал взглянуть на БЛОКИ И ТАЙМ-АУТЫ раздел lsof справочная страница.
Вы можете попробовать следующее и посмотреть, дает ли это желаемый результат:
lsof -bwp $pid | wc -l
Использовать ps -C <progname> -o pid= | wc -l
где progname это имя процесса в ps
-листинг.