Answers:
这样的程序将使用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
and来解决这一问题lsof
。wpa_supplicant
如果您毫不客气地弹开它的界面,它不会发闷。(如果确实如此,那是一个错误,需要修复;它并不表示您的某些错误。)
编写精良的网络程序当然可以应付此类问题。网络不可靠。如果程序无法应对接口被弹跳的问题,那么它也将无法应对拔出的以太网电缆,笨拙的DSL调制解调器或反铲。
strace
只能在启动时查看它们,然后等待bind(2)
呼叫。
find /proc/ -name tun0 | cut -d\/ -f3 | uniq | xargs -IPID lsof -p PID