Các chương trình như vậy sẽ được sử dụng ổ cắm Netlink để nói chuyện trực tiếp với trình điều khiển của phần cứng mạng. lsof
phiên bản 4.85 đã thêm hỗ trợ cho ổ cắm Netlink, nhưng trong thử nghiệm của tôi trên CentOS 5.8, tính năng này dường như không hoạt động tốt. Có lẽ nó phụ thuộc vào các tính năng được thêm vào trong các hạt nhân mới hơn.
Tuy nhiên, có thể đoán khá chính xác khi bạn chạy vào ổ cắm Netlink. Nếu bạn cat /proc/net/netlink
nhận được một danh sách các ổ cắm Netlink đang mở, bao gồm cả PID của các quy trình đã mở chúng. Sau đó, nếu bạn là lsof -p $THEPID
những PID đó, bạn sẽ tìm thấy các mục sock
trong TYPE
cột và can't identify protocol
trong NAME
cột. Không đảm bảo rằng đây là các ổ cắm Netlink, nhưng đó là một đặt cược khá tốt.
Bạn cũng có thể suy luận rằng một quy trình nhất định đang nói chuyện trực tiếp với một giao diện nếu nó có các tệp đang /sys/class/net/$IFNAME
mở.
Bây giờ, tất cả những gì đã được nói, tôi nghĩ rằng câu hỏi của bạn là sai.
Hãy nói rằng có một lệnh tôi chưa phát hiện ra. Gọi nó lsif -i wlan0
và nói rằng nó trả về một danh sách các PID truy cập vào giao diện được đặt tên. Bạn có thể làm gì với nó, điều này cho phép bạn "không làm phiền" các quy trình sử dụng giao diện đó, như bạn đã yêu cầu? Bạn đã lên kế hoạch tiêu diệt tất cả các quy trình bằng giao diện đó trước chưa? Điều đó thật đáng lo ngại. :) Có lẽ thay vào đó bạn nghĩ rằng việc bỏ giao diện từ bên dưới một quá trình sử dụng nó sẽ gây hại?
Điều gì, cuối cùng, là rất xấu về ifconfig wlan0 down
?
Giao diện mạng không phải là thiết bị lưu trữ. Bạn không cần phải xóa dữ liệu vào đĩa và ngắt kết nối chúng một cách duyên dáng. Không phá vỡ các ổ cắm mở có thể đáng giá, nhưng như bạn đã biết, bạn có thể tìm ra điều đó với netstat
và lsof
. wpa_supplicant
sẽ không hờn dỗi nếu bạn trả lại giao diện của nó một cách khác thường. (Nếu có, đó là một lỗi và cần được sửa chữa; nó sẽ không chỉ ra một số lỗi của bạn.)
Các chương trình mạng được viết tốt đối phó với những điều như vậy là chuyện đương nhiên. Mạng không đáng tin cậy. Nếu một chương trình không thể đối phó với một giao diện bị trả về, nó cũng sẽ không thể đối phó với các cáp Ethernet không được cắm, modem DSL khó hiểu hoặc backhoes .