Como combinar saídas de ps e lsof

2

Normalmente, a saída de ps tem um pid em algum lugar. Existe uma maneira de combinar isso, de preferência com um one-liner, com uma saída de lsof ?

por exemplo,

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
...

Nota: a primeira linha do primeiro bloco é a saída de ps para pid 27915 seguido por output lsof -p 27915 ; o segundo bloco é o mesmo para pid 6139 .

Essencialmente eu gostaria de uma junção por pid entre dois comandos, mas linha (s) de saída do primeiro comando primeiro e, em seguida, linhas de saída do segundo comando com o mesmo pid. A saída não é o mesmo que executar algo como join -1 2 -2 2 <(ps aux | sort -nk2) <(lsof | sort -nk2) - isso funciona muito bem mas mescla duas saídas juntas na mesma linha, produzindo a repetição do lado esquerdo.

    
por Alex 08.01.2013 / 04:03

1 resposta

1
ps -ef | awk '{ print $1 }' | while IFS= read a_pid ; do echo "" ; ps -p $a_pid ; lsof -p $a_pid ; done
    
por 08.01.2013 / 05:30