Bagaimana saya bisa mendapatkan info lebih lanjut tentang open pipe show in / proc di Linux?

53

Di Linux jika Anda /proc/<pid>/fdsering menggali, Anda akan melihat output seperti:

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]

Bagaimana saya mendapatkan lebih banyak info tentang pipa terbuka, seperti proses mana yang ada di ujung lain?

Kamil Kisiel
sumber
Jadi, menemukan secara keseluruhan /procitu lambat. Bisakah seseorang memberikan solusi yang lebih efektif?
pihentagy

Jawaban:

46

Serupa dengan jawaban lain, tetapi:

lsof | grep 90222668

Akan menunjukkan kepada Anda kedua ujungnya, karena kedua ujungnya berbagi 'nomor pipa'.

Kyle Brandt
sumber
3
Ah, tentu saja. Bekerja seperti yang diharapkan. Anda bahkan dapat memberi tahu nomor deskriptor file dan yang ujungnya adalah pembaca dan yang merupakan penulis dengan melihat kolom output ke-4!
Kamil Kisiel
Saya pikir angka itu mungkin nomor inode dari pipa untuk pipef yang tidak bisa kamu pasang. Saya mencari cara untuk mendapatkan inode ke pemetaan nama file, tetapi ini mungkin cara terbaik. Ngomong-ngomong, aku suka pertanyaan ini :-)
Kyle Brandt
Entah bagaimana ini tidak bekerja untuk saya. Semua outputnya adalah pipa itu sendiri.
Rui Marques
menjalankan lsof karena pengguna standar mungkin tidak memberikan Anda informasi dari semua proses. Biasanya Anda tidak memiliki izin untuk melihat direktori semua proses '/ proc / <pid> / fd sebagai pengguna non-root.
Andre Holzner
5
Juga, Anda mungkin ingin menggunakan lsof -n -P | grep 90222668untuk menghindari pencarian nama yang tidak perlu, yang akan mempercepatnya.
Wodin
4

Satu-satunya cara untuk menemukan proses apa yang ada di ujung lain adalah dengan mengulang semua proses di / proc dan melihat yang menggunakan pipa itu (yaitu, yang memiliki symlink di / proc / pid / fd ke ID pipa yang sama)

bdonlan
sumber
Terima kasih atas tipnya. Salah satu cara untuk mengotomatiskan ini adalah: ls -l /proc/*/fd/ | grep $PIPE_ID; ls -l /proc/*/fd/$FD | grep $PIPE_ID Perintah ls pertama akan mencetak file deskriptor dari kedua ujung pipa, sedangkan yang kedua akan memberi Anda id proses
Joao Costa
2

Informasi terbanyak yang saya tahu cara mendapatkan pipa terbuka adalah

lsof|grep FIFO

Masih hanya menceritakan tentang salah satu ujungnya, aku khawatir.

kekacauan
sumber
Itu hampir sama seperti yang saya dapat ilahi dari / proc, saya berasumsi dia mendapatkannya dari lokasi yang sama.
Kamil Kisiel