Ces programmes utiliseront des sockets Netlink pour communiquer directement avec le pilote du matériel réseau. lsof
la version 4.85 a ajouté la prise en charge des sockets Netlink, mais dans mes tests sur CentOS 5.8, la fonctionnalité ne semble pas très bien fonctionner. Cela dépend peut-être des fonctionnalités ajoutées dans les noyaux plus récents.
Cependant, il est possible de faire une bonne estimation du moment où vous avez rencontré un socket Netlink. Si vous cat /proc/net/netlink
obtenez une liste des sockets Netlink ouvertes, y compris le PID des processus qui les ont ouverts. Ensuite, si vous lsof -p $THEPID
ces PID, vous trouverez des entrées avec sock
dans la TYPE
colonne et can't identify protocol
dans la NAME
colonne. Ce n'est pas garanti qu'il s'agit de sockets Netlink, mais c'est un très bon pari.
Vous pouvez également déduire qu'un processus donné parle directement à une interface s'il a des fichiers /sys/class/net/$IFNAME
ouverts.
Maintenant, tout cela étant dit, je pense que votre question est erronée.
Disons qu'il y a une commande que je n'ai pas découverte. Appelez-le lsif -i wlan0
et dites qu'il renvoie une liste de PID accédant à l'interface nommée. Que pourriez-vous en faire qui vous permettrait de "ne pas déranger" les processus utilisant cette interface, comme vous l'avez demandé? Envisagiez-vous de tuer tous les processus utilisant cette interface en premier? C'est assez dérangeant. :) Peut-être pensiez-vous plutôt que supprimer l'interface sous un processus l'utilisant serait en quelque sorte dangereux?
Qu'est-ce qui est si mauvais à la fin ifconfig wlan0 down
?
Les interfaces réseau ne sont pas des périphériques de stockage. Vous n'avez pas besoin de vider les données sur le disque et de les démonter correctement. Ne pas casser les sockets ouverts pourrait être utile, mais comme vous le savez déjà, vous pouvez le comprendre avec netstat
et lsof
. wpa_supplicant
ne va pas bouder si vous faites rebondir son interface sans cérémonie. (Si c'est le cas, c'est un bug et doit être corrigé; cela n'indiquerait pas une faute de votre part.)
Des programmes de réseau bien écrits font face à de telles choses comme une évidence. Les réseaux ne sont pas fiables. Si un programme ne peut pas faire face à une interface rebondie, il ne pourra pas non plus gérer les câbles Ethernet débranchés, les modems DSL ou les rétrocaveuses .
strace
ing au démarrage et de regarder l'bind(2)
appel.find /proc/ -name tun0 | cut -d\/ -f3 | uniq | xargs -IPID lsof -p PID