如何合并 ps 和 lsof 的输出

如何合并 ps 和 lsof 的输出

通常 的输出ps在某处有一个 pid。有没有办法将它与 的输出结合起来,最好是一行代码lsof

例如

27915 ?        Ss     0:03 gpg-agent --daemon
gpg-agent 27915      httpd  mem     REG      104,1    144776     229236 /lib64/ld-2.5.so
gpg-agent 27915      httpd  mem     REG      104,1   1718232     229237 /lib64/libc-2.5.so
gpg-agent 27915      httpd  mem     REG      104,1     23360     229238 /lib64/libdl-2.5.so
...

6139 ?        Ss     0:00 /usr/sbin/restorecond
restoreco 6139 root  mem    REG  104,1    53880 228954 /lib64/libnss_files-2.5.so
restoreco 6139 root    0u   CHR    1,3      0t0   1771 /dev/null
...

注意:第一个块的第一行是pspid的输出27915,后面跟着输出lsof -p 27915;第二个块与 pid 相同6139

本质上,我希望通过 pid 连接两个命令,但首先输出第一个命令的行,然后输出具有相同 pid 的第二个命令的行。输出与运行类似的东西不同join -1 2 -2 2 <(ps aux | sort -nk2) <(lsof | sort -nk2)——这很好用,但将两个输出合并在同一行,产生左侧重复。

答案1

ps -ef | awk '{ print $1 }' | while IFS= read a_pid ; do echo "" ; ps -p $a_pid ; lsof -p $a_pid ; done

相关内容