Такие программы будут использовать сокеты Netlink для прямой связи с драйвером сетевого оборудования. lsof
В версии 4.85 добавлена поддержка сокетов Netlink, но в моем тестировании на CentOS 5.8 эта функция работала не очень хорошо. Возможно, это зависит от возможностей, добавленных в более новые ядра.
Тем не менее, можно сделать довольно хорошее предположение о том, что вы столкнулись с сокетом Netlink. Если вы cat /proc/net/netlink
получаете список открытых сокетов Netlink, включая PID процессов, у которых они открыты. Затем, если вы lsof -p $THEPID
эти PID, вы найдете записи sock
в TYPE
столбце и can't identify protocol
в NAME
столбце. Не гарантируется, что это сокеты Netlink, но это довольно хорошая ставка.
Вы также можете сделать вывод, что данный процесс общается напрямую с интерфейсом, если у него есть /sys/class/net/$IFNAME
открытые файлы .
Теперь, после всего сказанного, я думаю, что ваш вопрос ошибочен.
Допустим, есть команда, которую я не обнаружил. Вызовите его lsif -i wlan0
и скажите, что он возвращает список идентификаторов PID, обращающихся к названному интерфейсу. Что бы вы могли с ним сделать, что позволит вам «не мешать» процессам, использующим этот интерфейс, как вы и просили? Вы планировали сначала убить все процессы, используя этот интерфейс? Это довольно тревожно. :) Может быть, вы вместо этого подумали, что выпадение интерфейса из-под процесса, использующего его, будет как-то вредно?
Что, в конце концов, так плохо ifconfig wlan0 down
?
Сетевые интерфейсы не являются устройствами хранения. Вам не нужно сбрасывать данные на диск и корректно их размонтировать. Не стоит ломать сокеты, но, как вы уже знаете, вы можете понять это с помощью netstat
и lsof
. wpa_supplicant
не будет дуться, если вы отказываетесь от его интерфейса бесцеремонно. (Если это так, это ошибка, и ее нужно исправить; это не будет указывать на какую-то вашу ошибку.)
Хорошо написанные сетевые программы, конечно, справляются с такими вещами. Сети ненадежны. Если программа не может справиться с подпрыгивающим интерфейсом, она также не сможет справиться с отключенными кабелями Ethernet, модемами balky DSL или backhoes .
strace
считать их, когда они запускаются, и наблюдать заbind(2)
звонком.find /proc/ -name tun0 | cut -d\/ -f3 | uniq | xargs -IPID lsof -p PID