Como posso obter mais informações sobre a exibição de pipes abertos em / proc no Linux?

53

No Linux, se você pesquisar /proc/<pid>/fdfrequentemente, verá resultados como:

lrwx------ 1 root root 64 Jul 30 15:14 0 -> /dev/null
lrwx------ 1 root root 64 Jul 30 15:14 1 -> /dev/null
l-wx------ 1 root root 64 Jul 30 15:14 10 -> pipe:[90222668]
lr-x------ 1 root root 64 Jul 30 15:14 11 -> pipe:[90222669]
l-wx------ 1 root root 64 Jul 30 15:14 13 -> pipe:[90225058]
lr-x------ 1 root root 64 Jul 30 15:14 14 -> pipe:[90225059]

Como obtenho mais informações sobre os tubos abertos, como qual processo está do outro lado?

Kamil Kisiel
fonte
Assim, encontrar no todo /procé lento. Alguém pode fornecer uma solução mais eficaz?
Pihentagy

Respostas:

46

Semelhante a outras respostas, mas:

lsof | grep 90222668

Mostrará as duas extremidades, porque ambas compartilham o 'número do tubo'.

Kyle Brandt
fonte
3
Ah, claro. Funciona como esperado. Você pode até dizer o número do descritor de arquivo e qual extremidade é o leitor e qual é o escritor, observando a quarta coluna da saída!
31910 Kamil Kisiel
Eu acho que esse número pode ser o número de inode do tubo para pipefs que você não pode montar. Estou procurando uma maneira de obter inode para mapeamentos de nome de arquivo, mas esta pode ser a melhor maneira. By the way, eu amo esta pergunta :-)
Kyle Brandt
De alguma forma, isso não está funcionando para mim. Tudo o que produz é o próprio tubo.
Rui Marques
executar lsof como usuário padrão pode não fornecer informações de todos os processos. Normalmente, você não tem permissão para ver o diretório / proc / <pid> / fd de todos os processos como um usuário não root.
Andre Holzner
5
Além disso, convém usar lsof -n -P | grep 90222668para evitar pesquisas de nome desnecessárias, o que deve acelerar.
Wodin 14/10/19
4

A única maneira de encontrar qual processo está do outro lado é fazer um loop em todos os processos em / proc e ver quais estão usando esse canal (ou seja, que possuem links simbólicos em / proc / pid / fd para o mesmo ID de canal)

bdonlan
fonte
Obrigado pela dica. Uma maneira de automatizar isso é: ls -l /proc/*/fd/ | grep $PIPE_ID; ls -l /proc/*/fd/$FD | grep $PIPE_ID O primeiro comando ls imprimirá os descritores de arquivo de ambas as extremidades do pipe, enquanto o segundo fornecerá o ID do processo
Joao Costa
2

O máximo de informações que eu sei como entrar em canos abertos é

lsof|grep FIFO

Ainda só fala sobre uma extremidade, receio.

caos
fonte
É quase o mesmo que eu posso adivinhar de / proc, presumo que lsof o obtenha no mesmo local.
276 Kamil Kisiel