Temukan proses apa yang ada di ujung pipa yang lain


34

Saya mencoba untuk melacak beberapa perilaku aneh dari beberapa proses dan berlari ke titik saya tidak yakin bagaimana untuk melacak masa lalu. Proses digantung, yang saya lampirkan menggunakan strace -pmenunjukkan ini:

Process 7926 attached - interrupt to quit
read(3, 

Oke, jadi menunggu input pada fd 3, jadi saya pergi untuk memeriksa apa itu:

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

Oke, jadi itu pipa ... sekarang pertanyaannya - siapa penulis pipa ini? Saya ingat bahwa di Linux ada fitur khusus untuk soket domain unix di mana Anda dapat meminta jalur file yang dimulai dengan byte NUL untuk mengakses "abstrak soket namespace" (disebutkan di sini: http://tkhanson.net/cgit.cgi /misc.git/plain/unixdomain/Unix_domain_sockets.html ). Saya tidak yakin apakah ada sesuatu yang serupa dengan pipa yang bisa saya manfaatkan, tetapi saya belum menemukan apa pun.

Saya berharap alat suka fuseratau lsofmungkin bisa membantu, tetapi saya belum mendapatkan tempat.

Ada ide?

Jawaban:


32

Konten symlink "pipe: [20043922]" adalah ID unik; ujung pipa yang lain akan memiliki ID yang cocok.

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

harus menunjukkan Anda kedua ujung pipa.


1
Pemikiran yang bagus, terima kasih! Saat menyelidiki saya juga menemukan utas ini di sini serverfault.com/questions/48330/... jadi saya pikir saya akan menjatuhkan tautan di sini juga hanya untuk orang lain juga.
FatalError

2

Anda bisa mendapatkan daftar proses menggunakan pipa dengan menggunakan lsofperintah:

lsof | grep 'FIFO.*20043922'

Output akan menampilkan pembaca (di kolom FD dengan entri seperti 1r) dan penulis (kolom yang sama dengan entri seperti 2w).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.