Я не понимаю выход команды lsof.
Когда я пишу
lsof -p PID
Я получаю 4 строки и когда я пишу
lsof | grep PID
Я получаю сотни строк.
Разве это не должно вернуть тот же результат?
Спасибо за ваши ответы. Здесь вывод. Похоже, это субпроцесс или что означают эти задачи?
lsof -p 29076
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 29076 pr cwd unknown /proc/29076/cwd (readlink: Permission denied)
java 29076 pr rtd unknown /proc/29076/root (readlink: Permission denied)
java 29076 pr txt unknown /proc/29076/exe (readlink: Permission denied)
java 29076 pr NOFD /proc/29076/fd (opendir: Permission denied)
lsof |grep 29076|head -20
java 29076 pr cwd unknown /proc/29076/cwd (readlink: Permission denied)
java 29076 pr rtd unknown /proc/29076/root (readlink: Permission denied)
java 29076 pr txt unknown /proc/29076/exe (readlink: Permission denied)
java 29076 pr NOFD /proc/29076/fd (opendir: Permission denied)
java 29076 300 pr cwd unknown /proc/29076/task/300/cwd (readlink: Permission denied)
java 29076 300 pr rtd unknown /proc/29076/task/300/root (readlink: Permission denied)
java 29076 300 pr txt unknown /proc/29076/task/300/exe (readlink: Permission denied)
java 29076 300 pr NOFD /proc/29076/task/300/fd (opendir: Permission denied)
java 29076 329 pr cwd unknown /proc/29076/task/329/cwd (readlink: Permission denied)
java 29076 329 pr rtd unknown /proc/29076/task/329/root (readlink: Permission denied)
java 29076 329 pr txt unknown /proc/29076/task/329/exe (readlink: Permission denied)
java 29076 329 pr NOFD /proc/29076/task/329/fd (opendir: Permission denied)
java 29076 330 pr cwd unknown /proc/29076/task/330/cwd (readlink: Permission denied)
java 29076 330 pr rtd unknown /proc/29076/task/330/root (readlink: Permission denied)
java 29076 330 pr txt unknown /proc/29076/task/330/exe (readlink: Permission denied)
java 29076 330 pr NOFD /proc/29076/task/330/fd (opendir: Permission denied)
java 29076 331 pr cwd unknown /proc/29076/task/331/cwd (readlink: Permission denied)
java 29076 331 pr rtd unknown /proc/29076/task/331/root (readlink: Permission denied)
java 29076 331 pr txt unknown /proc/29076/task/331/exe (readlink: Permission denied)
java 29076 331 pr NOFD /proc/29076/task/331/fd (opendir: Permission denied)
lsof - список открытых файлов, попробуйте прочитать справочную страницу для lsof
#man lsof
lsof -p PID
выводит список открытых файлов, связанных с идентификатором процесса PID.При отсутствии каких-либо опций lsof выводит список всех открытых файлов, принадлежащих всем активным процессам. когда вы это сделаете
lsof | grep PID
, он перечисляет все открытые файлы, принадлежащие всем активным процессам, и подбирает номер PID, который может совпадать с самим PID, а также где угодно, где PID появляется как часть других PID и может также быть дочерним процессом PID, и скоро.Поэтому, если вы хотите использовать его,
lsof | grep PID
вам нужно точно подобрать PID, как полное совпадение словlsof | grep -w PID
, но это все равно приведет к большему количеству строк, если у PID есть другие дочерние процессы.источник
Я попробовал это в моей системе, и обе команды генерируют одни и те же списки, я предлагаю вам попробовать обе команды последовательно несколько раз, просто чтобы убедиться, что состояние процесса стабильно. Согласно справочной странице и вашим выводам, это единственное объяснение, которое я могу получить.
источник
Некоторые версии lsof включают идентификатор потока. Это можно определить по заголовку столбца TID, который виден в выходных данных. Такой вывод приведет к дублированию записей, поскольку lsof потенциально покажет дублированные записи по одной для каждого потока.
https://support.datastax.com/hc/en-us/articles/209826153-lsof-shows-Cassandra-is-holding-a-large-amount-of-files-open
источник