還原
- web依賴的某服務重啟后,web登錄不上,該服務負責web的登錄邏輯
- 重啟該服務,發現端口被占用
- 殺死該服務,發現端口仍被占用
- 利用netstat命令,發現是systemlogd占用了端口
- 該服務業務代碼通過system函數,調用了守護進程systemlogd。
- 殺死systemlogd,重啟服務,一切正常。
原因
服務監聽8899端口,業務代碼調用了守護進程systemlogd,該守護進程繼承了當前服務的文件環境,監聽8899的文件描述符,被守護進程繼承。故殺死服務,端口仍被systemlogd占用。
解決
對socket文件描述符設置FD_CLOEXEC標志。