นั่นคือหมายเลขไอโหนดสำหรับไพพ์หรือซ็อกเก็ตที่เป็นปัญหา
ไปป์เป็นช่องทางเดียวที่มีปลายเขียนและปลายอ่าน ในตัวอย่างของคุณดูเหมือนว่า FD 5 และ FD 6 กำลังคุยกันเนื่องจากตัวเลขไอโหนดเหมือนกัน (อาจจะไม่ใช่ดูด้านล่าง)
สิ่งที่พบได้บ่อยกว่าการเห็นโปรแกรมที่พูดกับตัวเองเหนือไพพ์เป็นคู่ของโปรแกรมที่แยกกันพูดคุยกันโดยทั่วไปแล้วเพราะคุณตั้งค่าไพพ์ระหว่างพวกเขาด้วยเชลล์:
shell-1$ ls -lR / | less
จากนั้นในหน้าต่างเทอร์มินัลอื่น:
shell-2$ ...find the ls and less PIDs with ps; say 4242 and 4243 for this example...
shell-2$ ls -l /proc/4242/fd | grep pipe
l-wx------ 1 user user 64 Mar 24 12:18 1 -> pipe:[222536390]
shell-2$ ls -l /proc/4243/fd | grep pipe
l-wx------ 1 user user 64 Mar 24 12:18 0 -> pipe:[222536390]
สิ่งนี้บอกว่าเอาต์พุตมาตรฐานของ PID 4242 (FD 1 ตามแบบแผน) เชื่อมต่อกับไพพ์ที่มีหมายเลขไอโหนด 222536390 และอินพุตมาตรฐานของ PID 4243 (FD 0) นั้นเชื่อมต่อกับไพพ์เดียวกัน
ทั้งหมดนี้เป็นวิธีที่ยาวในการบอกว่าls
เอาต์พุตนั้นกำลังถูกส่งไปยังless
อินพุตของ
เมื่อกลับมาที่ตัวอย่างของคุณ FD 1 และ FD 2 แทบจะไม่ได้พูดคุยกัน เป็นไปได้มากว่านี่คือผลลัพธ์ของการคาด stdout (FD 1) และ stderr (FD 2) ด้วยกันดังนั้นพวกเขาทั้งคู่จึงไปยังปลายทางเดียวกัน คุณสามารถทำสิ่งนี้ได้ด้วยเชลล์เป้าหมายเช่นนี้:
$ some-program 2>&1 | some-other-program
ดังนั้นถ้าคุณแหย่เข้าไป/proc/$PID_OF_SOME_OTHER_PROGRAM/fd
คุณจะพบ FD ที่สามติดกับไพพ์ที่มีหมายเลขไอโหนดเดียวกันกับที่แนบมากับ FDs 1 และ 2 สำหรับsome-program
อินสแตนซ์ นี่อาจเป็นสิ่งที่เกิดขึ้นกับ FDs 5 และ 6 ในตัวอย่างของคุณ แต่ฉันไม่มีทฤษฎีที่พร้อมว่า FDs ทั้งสองนี้มารวมกันอย่างไร คุณต้องรู้ว่าโปรแกรมกำลังทำอะไรอยู่ภายในเพื่อหาว่า
pidgin
- มีท่อและซ็อกเก็ตจำนวนมากและสิ่งอื่น ๆ ดังนั้นจึงเป็นตัวอย่างที่ดี คำถามสุดท้ายหนึ่งข้อ: inodes มีความเฉพาะในบริบทของระบบไฟล์เฉพาะใช่ไหม? ในขณะที่ฉันสามารถมี inode 3 ใน/
ระบบไฟล์ของฉันและอื่น ๆ (แตกต่าง) inode 3 ใน/boot
ระบบไฟล์ของฉัน