Demorou um pouco, mas consegui criar um filtro para anexar a lista de parâmetros do programa:
netstat -p | while l="$(line)";\
do p="$(sed -En 's/^.*( [0-9]+)\/[^ ]*.*//gp'<<<"$l")";\
[ "$p" == "" ] || p=" ## $(ps -p $p -o cmd=)";\
echo "$l"$p;\
done
Notas:
- Obviamente, você não digitará isso toda vez: coloque o código do filtro em uma função ou script (caso em que as seqüências
;\finais são desnecessárias). - Devido ao armazenamento em buffer quando
netstatgrava em um canal, há um atraso antes que o filtro inicie as linhas de processamento. - Pela mesma razão, existe a possibilidade de o programa terminar ou
execoutro entre quandonetstatgera a linha epsrecupera os argumentos para o PID. - O caminho do programa não será exibido se não tiver sido especificado quando o programa foi executado, pois
psmostraarg0da sequência de execução do programa. - Nem todos os sistemas têm o comando
line: se você substituirwhile l=($line)pelo mais usualwhile read -r l, isso ajustará os espaços iniciais e finais; Quando precisar retê-los, usewhile read -r, com$REPLYsubstituindo$l(ouwhile read -r; do l="$REPLY"; ...para um equivalente exato, com$linalterado). - O filtro funciona lendo uma linha de
netstat, usandosedpara extrair o PID de qualquer sequência número / seqüência , em seguida, usandops -pneste PID para encontrar os parâmetros de comando. - No final
echo "$l"$p, o$pestá fora das aspas: isso é para excluir espaços em branco à direita (também um problema comwineprograms), mas ele terá o efeito colateral de compactar vários espaços em parâmetros para um único espaço.