lsof -p PID 및 lsof PID |

lsof -p PID 및 lsof PID |

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)

답변1

실제 출력을 보지 않고 무슨 일이 일어나고 있는지 정확히 말하기는 어렵지만 명령이 "PID"가 있는 줄이 lsof -p PID아닌 지정된 PID로 열린 파일만 인쇄한다는 사실 때문일 것이라고 추측합니다 . lsof | grep PID라인의 어느 곳에나 위치합니다. 예를 들어, PID=123을 검색하는 경우 grep옵션은 PID 1231, 1232, 1233 등의 줄과 전체 경로에서 123이 있는 폴더에 있는 모든 파일도 인쇄합니다.

편집: 특정 예에서 차이점은 lsof스레드에 의해 열린 파일이 무시된다는 것입니다. 예제의 출력을 보면 grep세 번째 열은 "TID" 또는 스레드 ID입니다. TID가 없는 행은 -p이 옵션을 사용할 때 표시되는 것과 일치합니다. TID가 있는 행(즉, 다른 스레드에 의해 열린 행)은 추가입니다.

답변2

lsof - 열려 있는 파일을 나열합니다. lsof 매뉴얼 페이지를 읽어보세요.#man lsof

lsof -p PIDPID의 프로세스 ID와 연관된 열린 파일을 나열합니다.

옵션이 없으면 lsof는 모든 활성 프로세스에 속하는 모든 열린 파일을 나열합니다. 이 작업을 수행하면 lsof | grep PID모든 활성 프로세스에 속하는 모든 열린 파일이 나열되고 PID 번호에 대한 grep이 나열됩니다. 이는 PID 자체는 물론 PID가 다른 PID의 일부로 발생하고 가능한 경우 하위 프로세스로 발생하는 모든 위치와 일치할 수 있습니다. PID, 그리고 빠르게.

따라서 사용하려면 lsof | grep PID전체 단어 일치처럼 PID를 정확하게 일치시켜야 lsof | grep -w PID하지만 PID에 다른 하위 프로세스가 있으면 더 많은 행이 생성됩니다.

답변3

lsof의 일부 버전에는 스레드 ID가 포함되어 있습니다. 이는 출력에 표시된 TID 열 헤더로 확인할 수 있습니다. lsof가 각 스레드에 대해 하나의 중복 항목을 표시할 수 있으므로 이러한 출력은 중복 항목을 발생시킵니다.

https://support.datastax.com/hc/en-us/articles/209826153-lsof-shows-Cassandra-is-holding-a-large-amount-of-files-open

답변4

PID 뒤의 프로세스가 실행 중인 사용자에 속하지 않는 경우 lsof위의 출력이 표시됩니다. 원하는 출력을 얻으려면 루트 권한이 필요할 수도 있습니다.

관련 정보