ค้นหากระบวนการที่อยู่อีกปลายหนึ่งของไพพ์


34

ฉันพยายามติดตามพฤติกรรมแปลก ๆ ของกระบวนการบางอย่างและวิ่งเข้าหาจุดฉันไม่แน่ใจว่าจะติดตามอดีตได้อย่างไร กระบวนการแขวนซึ่งฉันแนบมากับการใช้strace -pแสดงให้เห็นว่านี้:

Process 7926 attached - interrupt to quit
read(3, 

โอเคมันกำลังรอการป้อนข้อมูลใน fd 3 ดังนั้นฉันจึงไปตรวจสอบว่ามันคืออะไร:

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

โอเคดังนั้นมันเป็นท่อ ... ตอนนี้คำถาม - ใครคือผู้เขียนของท่อนี้? ฉันจำได้ว่าบน Linux มีคุณสมบัติพิเศษสำหรับซ็อกเก็ตโดเมน unix ที่คุณสามารถขอเส้นทางไฟล์ที่ขึ้นต้นด้วย NUL byte เพื่อเข้าถึง "abstract socket namespace" (กล่าวถึงที่นี่: http://tkhanson.net/cgit.cgi /misc.git/plain/unixdomain/Unix_domain_sockets.html ) ฉันไม่แน่ใจว่ามีสิ่งใดที่คล้ายกับท่อที่ฉันสามารถใช้ประโยชน์จากได้ แต่ฉันไม่พบอะไรเลย

ฉันหวังว่าจะมีเครื่องมือเหมือนfuserหรือlsofอาจช่วยได้ แต่ฉันไม่ได้ไปไหนเลย

ความคิดใด ๆ

คำตอบ:


32

เนื้อหา symlink "ไปป์: [20043922]" เป็นรหัสเฉพาะ ปลายอีกด้านหนึ่งของไปป์จะมี ID ที่ตรงกัน

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

ควรแสดงให้คุณเห็นปลายทั้งสองของท่อ


1
คิดดีขอบคุณ! ในขณะที่ตรวจสอบฉันก็เจอกระทู้นี้ที่นี่serverfault.com/questions/48330/ …ดังนั้นฉันคิดว่าฉันจะวางลิงค์ที่นี่เช่นกันเพียงแค่ ffr สำหรับคนอื่นด้วย
FatalError

2

คุณสามารถรับรายการกระบวนการโดยใช้ไพพ์โดยใช้lsofคำสั่ง:

lsof | grep 'FIFO.*20043922'

เอาต์พุตจะแสดงตัวอ่าน (ในคอลัมน์ FD ที่มีรายการเช่น 1r) และตัวเขียน (คอลัมน์เดียวกันกับรายการเช่น 2w)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.