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 PID
PID의 프로세스 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가 각 스레드에 대해 하나의 중복 항목을 표시할 수 있으므로 이러한 출력은 중복 항목을 발생시킵니다.
답변4
PID 뒤의 프로세스가 실행 중인 사용자에 속하지 않는 경우 lsof
위의 출력이 표시됩니다. 원하는 출력을 얻으려면 루트 권한이 필요할 수도 있습니다.