我在两个进程之间建立了连接:
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
,所以我需要使用选项 number 1
。