我正在尝试获取每个进程的打开文件列表。我从PerlMonks运行了以下单行:
lsof | perl -lane '$x{"$F[0]:$F[1]"}++;
END { print "$x{$_}\t$_" for sort {$x{$a}<=>$x{$b}} keys %x}'
Run Code Online (Sandbox Code Playgroud)
它返回打开文件的总数,以及进程名称和 pid。结果按升序排列,最后一行如下:
1065702 java:15437
Run Code Online (Sandbox Code Playgroud)
所以当我运行时lsof -p 15437
,我希望它返回相同的数字,但是我得到:
$ lsof -p 15437 | wc -l
403
Run Code Online (Sandbox Code Playgroud)
为什么会出现差异?
附录
差异的第三个来源:
$ cd /proc/15437/fd
$ ls -1 | wc -l
216
Run Code Online (Sandbox Code Playgroud) lsof ×1