Esses programas usarão os soquetes Netlink para conversar diretamente com o driver do hardware de rede. lsof
A versão 4.85 adicionou suporte para soquetes Netlink, mas nos meus testes no CentOS 5.8, o recurso não parece funcionar muito bem. Talvez isso dependa dos recursos adicionados nos kernels mais recentes.
No entanto, é possível adivinhar quando você encontra um soquete Netlink. Se você cat /proc/net/netlink
receber uma lista de soquetes Netlink abertos, incluindo o PID dos processos que os abriram. Então, se lsof -p $THEPID
esses PIDs, você encontrará entradas sock
na TYPE
coluna e can't identify protocol
na NAME
coluna. Não é garantido que sejam soquetes Netlink, mas é uma aposta muito boa.
Você também pode inferir que um determinado processo está conversando diretamente com uma interface se ela tiver arquivos /sys/class/net/$IFNAME
abertos.
Agora, tudo o que foi dito, acho que sua pergunta está errada.
Digamos que exista um comando que não descobri. Ligue lsif -i wlan0
e diga que ele retorna uma lista de PIDs acessando a interface nomeada. O que você poderia fazer com isso que permitiria "não perturbar" os processos usando essa interface, conforme solicitado? Você estava planejando acabar com todos os processos usando essa interface primeiro? Isso é muito perturbador. :) Talvez você estivesse pensando que deixar a interface de baixo de um processo usando-a seria prejudicial?
No final, o que há de tão ruim ifconfig wlan0 down
?
As interfaces de rede não são dispositivos de armazenamento. Você não precisa liberar os dados para o disco e desmontá-los normalmente. Não quebrar soquetes abertos pode valer a pena, mas como você já sabe, você pode descobrir isso com netstat
e lsof
. wpa_supplicant
não vai ficar de mau humor se você rejeitar sua interface sem a menor cerimônia. (Caso isso ocorra, é um bug e precisa ser corrigido; não indicaria uma falha sua.)
Programas de rede bem escritos lidam com essas coisas, é claro. Redes não são confiáveis. Se um programa não conseguir lidar com o retorno de uma interface, ele também não conseguirá lidar com cabos Ethernet desconectados, modems DSL desconectados ou retroescavadeiras .
strace
exceto quando eles começam, e prestando atenção nabind(2)
ligação.find /proc/ -name tun0 | cut -d\/ -f3 | uniq | xargs -IPID lsof -p PID