我编写了一个基于 lsof 的脚本来监视特定应用程序的每个进程使用的套接字(每个进程一个套接字)。当我指定 -i 选项将打开的文件列表限制为套接字时,某些进程会丢失。
令 pid_list 为常量且格式正确的逗号分隔列表,包含 136 个进程。为什么结果有时小于136?
$ lsof -p $pid_list -a -i -nP -FpcnT | grep ^p | wc -l
135
$ lsof -p $pid_list -a -i -nP -FpcnT | grep ^p | wc -l
134
$ lsof -p $pid_list -a -i -nP -FpcnT | grep ^p | wc -l
136
Run Code Online (Sandbox Code Playgroud)
只需 1 个 pid 即可重现该问题。
$ clear ; lsof -p 5404 -a -i -nP -FpcnT
p5404
cprocess
nsource:port->dest:port
TST=ESTABLISHED
TQR=0
TQS=0
$ clear ; lsof …
Run Code Online (Sandbox Code Playgroud)