lsof -p PID
이는 단일 프로세스에서 열린 모든 파일을 나열하는 데는 잘 작동하지만 특정 기본 프로세스와 해당 하위 프로세스에서 현재 열려 있는 모든 파일을 나열해야 합니다. 이를 수행하는 가장 좋은 방법은 무엇입니까? 이것이 가능하지 않다면 lsof
이를 달성하기 위해 어떤 다른 방법을 사용할 수 있습니까?
답변1
(직계) 하위 항목 에 대해 $pid
다음을 수행할 수 있습니다.
lsof -p "$({ echo "$pid"; pgrep -P "$pid"; } | paste -sd , -)"
pgrep
, like는 lsof
표준 명령은 아니지만 이제 많은 시스템에서 발견됩니다.
pstree
모든 자손(자식, 손자 등) 에 대해 pid 목록을 얻는 데 사용할 수 있지만 출력을 안정적으로 구문 분석할 수 없기 때문에 이는 완벽하지는 않습니다. 다음과 같은 도우미 기능을 사용할 수 있습니다.
descendants() {
ps -Ao pid= -o ppid= | PID=$1 perl -lae '
push @{$children{$F[1]}}, $F[0];
sub tree {
my @pids=($_[0]);
push @pids, tree($_) for @{$children{$_[0]}};
return @pids;
}
END{print for tree $ENV{PID}}'
}
그런 다음 전화하십시오.
lsof -p "$(descendants "$pid" | paste -sd, -)"
답변2
세미 핸드메이드 패션:
$ pstree -p PID
위에서 PID 수집
$ lsof -p pid1,pid2,pid3,...
또는 출력이 ps --ppid 1413 -o pid=
비어 있을 때까지 반복하여 pid 목록을 수집합니다.
답변3
lsof -n | awk '{print $2}' | sort | uniq -c | sort -nr | grep PARENT_PID
lsof는 상위 및 하위 프로세스의 열린 파일을 나열할 수 있기 때문입니다. 두 번째 열의 출력은 상위 프로세스입니다.