Làm cách nào tôi có thể biết thêm thông tin về các đường ống mở hiển thị trong / Proc trong Linux?


53

Trong Linux, nếu bạn /proc/<pid>/fdthường xuyên đi sâu vào, bạn sẽ thấy đầu ra như:

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]

Làm thế nào để tôi có thêm thông tin về các đường ống mở, chẳng hạn như quá trình nào ở đầu bên kia?


lsof, tìm thấy trong toàn bộ /proclà chậm. Ai đó có thể cung cấp một giải pháp hiệu quả hơn?
piropagy

Câu trả lời:


46

Tương tự với các câu trả lời khác, nhưng:

lsof | grep 90222668

Sẽ hiển thị cho bạn cả hai đầu, bởi vì cả hai đầu đều chia sẻ 'số ống'.


3
À, tất nhiên rồi. Hoạt động như mong đợi. Bạn thậm chí có thể cho biết số mô tả tập tin và đầu cuối là đầu đọc và nhà văn nào bằng cách nhìn vào cột thứ 4 của đầu ra!
Kamil Kisiel

Tôi nghĩ rằng số đó có thể là số inode của đường ống cho các đường ống mà bạn không thể lắp. Tôi đang tìm cách để inode thành ánh xạ tên tệp, nhưng đây có thể là cách tốt nhất. Nhân tiện, tôi thích câu hỏi này :-)
Kyle Brandt

Bằng cách nào đó, điều này không làm việc cho tôi. Tất cả đầu ra là đường ống chính nó.
Rui Marques

chạy lsof với tư cách là người dùng chuẩn có thể không cung cấp cho bạn thông tin từ tất cả các quy trình. Thông thường, bạn không có quyền xem tất cả các thư mục '/ Proc / <pid> / fd của quy trình với tư cách là người dùng không root.
Andre Holzner

5
Ngoài ra, bạn có thể muốn sử dụng lsof -n -P | grep 90222668để tránh tra cứu tên không cần thiết, điều này sẽ tăng tốc nó.
Wodin

4

Cách duy nhất để tìm quá trình ở đầu bên kia là lặp qua tất cả các quy trình trong / Proc và xem cái nào đang sử dụng ống đó (nghĩa là có liên kết tượng trưng trong / Proc / pid / fd với cùng một ID ống)


Cảm ơn vì tiền hỗ trợ. Một cách để tự động hóa điều này là: ls -l /proc/*/fd/ | grep $PIPE_ID; ls -l /proc/*/fd/$FD | grep $PIPE_ID Lệnh ls đầu tiên sẽ in mô tả tệp của cả hai đầu ống, trong khi cách thứ hai sẽ cung cấp cho bạn id quá trình
Joao Costa

2

Thông tin nhiều nhất tôi biết làm thế nào để có được trên đường ống mở là

lsof|grep FIFO

Vẫn chỉ nói về một đầu của nó, tôi sợ.


Điều đó cũng giống như tôi có thể thần thánh từ / Proc, tôi cho rằng lsof lấy nó từ cùng một vị trí.
Kamil Kisiel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.