![포트 소유자는 프로세스 종료 후 netstat로 전환합니다.](https://linux55.com/image/116300/%ED%8F%AC%ED%8A%B8%20%EC%86%8C%EC%9C%A0%EC%9E%90%EB%8A%94%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EC%A2%85%EB%A3%8C%20%ED%9B%84%20netstat%EB%A1%9C%20%EC%A0%84%ED%99%98%ED%95%A9%EB%8B%88%EB%8B%A4..png)
두 프로세스 사이에 연결을 설정했습니다.
netstat -tpn | grep 9999
tcp 0 0 127.0.0.1:*58728* 127.0.0.1:9999 ESTABLISHED 17366/*my_app.bin*
이 프로세스를 종료한 후에도
1. 연결은 여전히 ESTABLISHED
살아 있습니다
. 2. 포트가 58728
여전히 netstat 테이블에 있고 다른 프로세스 이름이 있음을 확인했습니다.
tcp 0 0 127.0.0.1:*58728* 127.0.0.1:9999 ESTABLISHED 19645/*udhcpc*
어떻게 그래?
답변1
문제는 udhcpc
프로세스가 내 프로세스에서 생성된다는 것입니다 my_app.bin
.
이 빌드에서는 생성된 프로세스가 를 상속하므로 my_app.bin
에서 소켓을 닫아도 my_app.bin
에서 닫히지 않습니다 udhcpc
.
해결책:
O_CLOEXEC
소켓을 열 때 사용되거나 나중에fcntl()
플래그와 함께 사용됩니다.FD_CLOEXEC
- 생성된 프로세스에서 관련 없는 열린 파일 설명자를 모두 닫습니다.
내 경우에는 제어할 수 없으므로 udhcpc
옵션 번호를 사용해야 합니다 1
.