Program semacam itu akan menggunakan soket Netlink untuk berbicara dengan driver perangkat keras jaringan secara langsung. lsof
versi 4.85 menambahkan dukungan untuk soket Netlink, tetapi dalam pengujian saya pada CentOS 5.8, fitur ini tampaknya tidak berfungsi dengan baik. Mungkin itu tergantung pada fitur yang ditambahkan di kernel yang lebih baru.
Namun, dimungkinkan untuk membuat perkiraan yang cukup baik tentang kapan Anda mengalami soket Netlink. Jika Anda cat /proc/net/netlink
mendapatkan daftar soket Netlink terbuka, termasuk PID proses yang telah dibuka. Kemudian jika Anda lsof -p $THEPID
PID tersebut, Anda akan menemukan entri dengan sock
di TYPE
kolom dan can't identify protocol
di NAME
kolom. Ini tidak dijamin bahwa ini adalah soket Netlink, tetapi ini taruhan yang cukup bagus.
Anda juga dapat menyimpulkan bahwa proses yang diberikan berbicara langsung ke antarmuka jika memiliki file di bawah /sys/class/net/$IFNAME
terbuka.
Sekarang, semua yang telah dikatakan, saya pikir pertanyaan Anda salah arah.
Katakanlah ada perintah yang belum saya temukan. Sebut saja lsif -i wlan0
, dan katakan itu mengembalikan daftar PID yang mengakses antarmuka yang disebutkan. Apa yang dapat Anda lakukan dengan itu yang memungkinkan Anda untuk "tidak mengganggu" proses menggunakan antarmuka itu, seperti yang Anda minta? Apakah Anda berencana untuk mematikan semua proses menggunakan antarmuka itu terlebih dahulu? Itu cukup mengganggu. :) Mungkin Anda malah berpikir bahwa menjatuhkan antarmuka dari bawah proses menggunakannya entah bagaimana akan berbahaya?
Apa, pada akhirnya, yang sangat buruk ifconfig wlan0 down
?
Antarmuka jaringan bukan perangkat penyimpanan. Anda tidak perlu mem-flush data ke disk dan melepasnya dengan anggun. Tidak merusak soket yang terbuka mungkin bermanfaat, tetapi seperti yang sudah Anda ketahui, Anda dapat mengetahuinya dengan netstat
dan lsof
. wpa_supplicant
tidak akan ngambek jika antarmuka terpental begitu saja. (Jika ya, itu adalah bug dan perlu diperbaiki; itu tidak akan menunjukkan kesalahan Anda.)
Program jaringan yang ditulis dengan baik mengatasi hal-hal seperti hal yang biasa. Jaringan tidak bisa diandalkan. Jika suatu program tidak dapat mengatasi antarmuka yang terpental, ia juga tidak akan dapat mengatasi kabel Ethernet yang tidak terhubung, modem DSL yang kasar, atau backhoe .
strace
mereka saat mereka mulai, dan mengawasibind(2)
panggilan.find /proc/ -name tun0 | cut -d\/ -f3 | uniq | xargs -IPID lsof -p PID