2012-09-17 1 views
11

서버에서 실행중인 프로세스의 인스턴스가 30 개이고 분석을 위해 각 프로세스의 열린 파일을 기록하려고합니다.lsof는 일련의 pids에 대해 열려있는 파일을 모두 제공해야합니다.

* ps auwwx | grep PROG_NAME | awk '{print $2}' | xargs lsof -p | less 

이 불만 , "lsof를 :에 상태 오류 : 해당 파일이나 디렉토리"나는 lsof -p <pid>을 실행하면

그러나, 그것은 나를을 제공

나는 다음과 같은 명령을 실행 해당 프로세스의 열린 파일 목록. FreeBSD 컴퓨터에서 프로세스의 모든 30 개 인스턴스에 대해 열려있는 파일의 목록을 어떻게 얻을 수 있습니까?

또한 공유 라이브러리가 나열되기를 원하지 않습니다. -d "^txt"을 수행하면 표시 할 다른 db 파일이 표시되지 않습니다. .so 파일을 grep하는 다른 방법이 있습니까?

+0

: 특정 패턴과 일치하는 명령에서 열려있는 모든 파일을 나열 lsof -c을 사용 나는 비슷한 문제를 해결하기 위해 원 - 열린 파일의 수를 계산을 프로세스 당, 특히 자바. 나는 이렇게했다 :'pgrep java | xargs -I {} bash -c 'printf {}; lsof -p {} | wc -l '' –

답변

14

lsof -p 옵션은 쉼표로 구분 된 PID 목록을 사용합니다. xargs을 사용하는 방법은 pid를 별도의 인수로 전달하여 일부를 파일 이름으로 해석하도록 유도합니다.

시도해보십시오. 후속 쉼표가있는 것 같습니다. lsof이 신경 쓸지 모르겠지만, 필요한 경우 sed 수 있습니다.

5

xargs -L1 lsof -p을 사용하면 lsof을 PID 당 1 회 실행할 수 있습니다.

더 나은 : 인터넷 통행인을위한 참고

lsof -c bas # list all processes with commands starting with 'bas' 
lsof -c '/ash$/x' # list all commands ending with 'ash' (regexp syntax) 
관련 문제