Linux
終止程序後,埠的所有者切換到 netstat
我在兩個程序之間建立了連接:
netstat -tpn | grep 9999 tcp 0 0 127.0.0.1:*58728* 127.0.0.1:9999 ESTABLISHED 17366/*my_app.bin*
殺死該程序後,
- 連接仍處於
ESTABLISHED
狀態2。我注意到埠
58728
仍在 netstat 表中,並帶有另一個程序名稱:tcp 0 0 127.0.0.1:*58728* 127.0.0.1:9999 ESTABLISHED 19645/*udhcpc*
怎麼會這樣?
似乎問題是該
udhcpc
過程是從我的過程中產生的my_app.bin
。在這個派生中,派生的程序繼承了所有打開的文件描述符
my_app.bin
。因此,當我從 關閉套接字時my_app.bin
,它並沒有從 關閉udhcpc
。解決方案:
O_CLOEXEC
在打開套接字時使用,或稍後fcntl()
與FD_CLOEXEC
標誌一起使用。- 在生成的程序中,關閉所有不相關的打開文件描述符。
在我的情況下,我無法控制
udhcpc
,所以我需要使用 option number1
。