-p $PID
on 을 사용하면 lsof
프로세스의 직접 스레드만 얻습니다. 스레드와 lsof를 효과적으로 사용하는 이유와 방법은 무엇입니까?
sudo lsof -p 5344 > lsof-p5344.log
sudo lsof | grep '\<5344\>' > lsofgrep5344.log
$ wc -l lsof*5344.log
1,120,208 lsofgrep5344.log
2,166 lsof-p5344.log
이는 정확한 프로세스의 라인입니다. 이것은아니요자식 프로세스에 대해. 여기서는 awk
출력 필드 2(lsof 출력의 두 번째 열)를 필터링하기 위해 정확히 프로세스 PID 번호를 사용하고 있습니다.
$ cat lsof-p5344.log | awk '{print $2}' | grep '^5344$' | wc -l
2,165
$ cat lsofgrep5344.log | awk '{print $2}' | grep '^5344$' | wc -l
1,120,207
이제 첫 번째 열 "COMMAND"로 필터링하면 Java 애플리케이션의 다른 스레드가 표시되고 하나는 lsof -p
기본 스레드(예: "COMMAND=java_daemon")만 표시되는 반면 lsof | grep
많은 스레드(예: " COMMAND=pool123)가 표시됩니다. "), JMX, Java2D, Quartz 등", 여기서 "PID"는 5344와 같음)
답변1
내 시스템에는 lsof -k
스레드 번호가 표시됩니다. 하지만 리소스(파일, 메모리 맵...)가 전체 프로세스에 할당되고(한 스레드에서 열린 파일을 다른 스레드에서 사용할 수 있음) 스레드 마이닝이 관련성이 없는 것 같습니다.
내 Linux 시스템에서는 파일이 열리자마자 종료되는 스레드를 만듭니다. lsof
파일을 연 스레드가 더 이상 존재하지 않는 동안에도 파일 보기는 계속됩니다.