Linux

終止程序後,埠的所有者切換到 netstat

  • August 20, 2017

我在兩個程序之間建立了連接:

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*

怎麼會這樣?

似乎問題是該udhcpc過程是從我的過程中產生的my_app.bin

在這個派生中,派生的程序繼承了所有打開的文件描述符my_app.bin。因此,當我從 關閉套接字時my_app.bin,它並沒有從 關閉udhcpc

解決方案:

  1. O_CLOEXEC在打開套接字時使用,或稍後fcntl()FD_CLOEXEC標誌一起使用。
  2. 在生成的程序中,關閉所有不相關的打開文件描述符。

在我的情況下,我無法控制udhcpc,所以我需要使用 option number 1

引用自:https://unix.stackexchange.com/questions/386464