프로세스를 방해하지 않고 네트워크 인터페이스를 안전하게 종료하는 방법을 찾으려고 합니다. 그러기 위해서는 현재 어떤 프로세스가 인터페이스를 사용하고 있는지 알아내야 합니다. ss
, 또는 기타 netstat
도구는 lsof
소켓이 열려 있지만 표시되지 않는 프로세스를 표시하는 데 도움이 되며 wpa_supplicant
기타 도구도 있습니다 dhcpcd
.hostapd
이러한 프로세스를 보편적으로 감지할 수 있는 방법이 있습니까? dhcpcd는 때때로 소켓을 여는 프로그램이기 때문에 아마도 작동하지 않을 것입니다. 그러나 wpa_supplicant 및 hostapd가 감지 가능한 인터페이스에 대해 "뭔가를 수행"하고 관련 PID를 유발할 수도 있다고 가정합니다.
답변1
이러한 프로그램은네트워크 링크 소켓네트워크 하드웨어 드라이버와 직접 대화하세요. lsof
버전 4.85다음에 추가Netlink 소켓이 지원되지만 CentOS 5.8에서 테스트한 결과 이 기능이 제대로 작동하지 않는 것 같습니다. 어쩌면 새 커널에 추가된 기능에 따라 달라질 수도 있습니다.
그러나 Netlink 소켓을 발견하면 좋은 추측을 할 수 있습니다. 열려 있는 Netlink 소켓 목록을 얻으면 cat /proc/net/netlink
해당 소켓을 연 프로세스의 PID를 포함하세요. 그런 다음 이러한 PID를 사용하면 열과 열에서 lsof -p $THEPID
항목을 찾을 수 있습니다. Netlink 소켓이라는 보장은 없지만 좋은 선택입니다.sock
TYPE
can't identify protocol
NAME
또한 특정 프로세스에 열린 파일이 있는 경우 해당 프로세스가 인터페이스와 직접 통신하고 있음을 추론할 수도 있습니다 /sys/class/net/$IFNAME
.
그러고 보니 귀하의 질문이 잘못된 것 같습니다.
내가 아직 발견하지 못한 명령이 있다고 가정해 보겠습니다. 이를 호출 lsif -i wlan0
하고 지정된 인터페이스에 액세스하는 PID 목록을 반환한다고 말합니다. 필요한 대로 인터페이스를 사용하는 프로세스를 "방해하지" 않도록 하려면 어떻게 해야 합니까? 먼저 인터페이스를 사용하는 모든 프로세스를 종료할 계획입니까? 정말 혼란스럽습니다. :) 아마도 인터페이스를 사용하여 프로세스 아래에서 인터페이스를 제거하는 것이 어떤 면에서는 해로울 것이라고 생각하시나요?
무엇이 그렇게 나쁜가요 ifconfig wlan0 down
?
네트워크 인터페이스는 저장 장치가 아닙니다. 데이터를 디스크에 플러시하고 정상적으로 제거할 필요가 없습니다. 열린 소켓을 파괴하지 않는 것이 아마도 가치가 있을 것입니다. 그러나 아시다시피 and 를 netstat
사용하여 이 문제를 해결할 수 있습니다 lsof
. wpa_supplicant
무의식적으로 인터페이스로 되돌아가도 부루퉁해지지 않습니다. (그렇다면 버그이므로 수정해야 합니다. 이는 사용자 측에서 잘못된 점을 나타내지 않습니다.)
잘 작성된 네트워크 프로그램은 이러한 일을 당연히 처리할 수 있습니다. 네트워크가 불안정합니다. 프로그램이 끊어진 인터페이스를 처리할 수 없다면 플러그가 뽑힌 이더넷 케이블, 불안정한 DSL 모뎀 또는 문제를 처리할 수 없습니다.굴착기.