Encontre qual processo está na outra extremidade de um tubo

34

Estou tentando rastrear algum comportamento estranho de alguns processos e cheguei a um ponto que não sei ao certo como rastrear o passado. O processo interrompido, ao qual me anexei, strace -pmostrou o seguinte:

Process 7926 attached - interrupt to quit
read(3, 

Ok, então está aguardando a entrada no fd 3, então fui verificar o que é:

$ ls -l /proc/7926/fd/3
lr-x------ 1 user grp 64 Mar 15 10:41 /proc/7926/fd/3 -> pipe:[20043922]

Ok, então é um cano ... agora a pergunta - quem é o escritor desse cano? Lembro que no Linux há um recurso especial para soquetes de domínio unix, onde você pode solicitar um caminho de arquivo que comece com um byte NUL para acessar o "espaço de nome do soquete abstrato" (mencionado aqui: http://tkhanson.net/cgit.cgi /misc.git/plain/unixdomain/Unix_domain_sockets.html ). Não tenho certeza se há algo semelhante para tubos que eu possa tirar proveito, mas não encontrei nada.

Eu esperava que uma ferramenta como fuserou lsofpudesse ajudar, mas não cheguei a lugar algum.

Alguma ideia?

Erro fatal
fonte

Respostas:

32

O conteúdo do link simbólico "pipe: [20043922]" é um ID exclusivo; a outra extremidade do tubo terá um ID correspondente.

(find /proc -type l | xargs ls -l | fgrep 'pipe:[20043922]') 2>/dev/null

deve mostrar as duas extremidades do tubo.

Kyle Jones
fonte
1
Bom pensamento, obrigado! Enquanto investigava, também encontrei esse tópico aqui serverfault.com/questions/48330/…, então pensei em deixar o link aqui também apenas ffr para outros também.
FatalError
2

Você pode obter a lista de processos usando o canal usando o lsofcomando:

lsof | grep 'FIFO.*20043922'

A saída mostrará os leitores (na coluna FD com entradas como 1r) e gravadores (mesmas colunas com entradas como 2w).

Eugen
fonte