Jika dua proses dihubungkan oleh pipa,
> cmd1 | cmd2
adakah cara untuk cmd1
mengetahui nama (atau PID) proses di sisi lain pipa ( cmd2
)?
Begitu juga sebaliknya, adakah cara untuk cmd2
mendapatkan nama / PID cmd1
?
Saya tahu bahwa ada isatty(3)
untuk memeriksa apakah output pergi ke (atau input berasal dari) terminal, jadi saya bertanya-tanya apakah ada cara untuk mengetahui sedikit lebih banyak tentang sisi lain.
cmd2
bercabang dua.cmd1 | (cmd2 & cmd3)
Jawaban:
Anda dapat melihat pipa di
/proc/$PID/fd
. Deskriptor adalah symlink ke sesuatu sepertipipe:[188528098]
. Dengan informasi itu Anda dapat mencari proses lainnya:Atau, jika Anda ingin memastikan (untuk pemrosesan otomatis) bahwa nomor tersebut adalah soket dan bukan bagian dari nama file:
Dengan
lsof
4.88 dan di atasnya, Anda juga dapat menggunakan tanda-E
atau+E
:Dalam kombinasi dengan
-p <pid>
,,-d <descriptor>
Anda bisa mendapatkan informasi endpoint untuk deskriptor spesifik pid yang diberikan .Di atas memberi tahu kami bahwa
fd
0 ofsh
adalah pipa dengan fd 1 ofsleep
di ujung yang lain. Jika Anda mengubah-E
ke+E
, Anda juga mendapatkan informasi lengkap untuk itu darisleep
:(lihat bagaimana
lsof
juga memiliki pipa di stdin-nya)sumber
lsof
itu.