亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在某些情況下,Go 會自動關閉文件描述嗎?

在某些情況下,Go 會自動關閉文件描述嗎?

Go
喵喔喔 2022-08-15 19:41:25
我正在嘗試檢測Go打開的文件描述,但沒有故意關閉。換句話說,我試圖使我的代碼“錯誤”,資源泄漏。我的代碼是func hh(w http.ResponseWriter, r *http.Request) {    f0, err := os.OpenFile("notes.txt", os.O_RDWR|os.O_CREATE, 0755)    if err != nil {        log.Fatal(err)    }        // I don't close file    fmt.Println(io.ReadAll(f0))}func main() {    http.HandleFunc("/req", hh)    log.Fatal(http.ListenAndServe(":8080", nil))}我使用shell腳本文件打印出有多少文件描述屬于這個Go程序。FCOUNT=`lsof -p $1 | grep -v " txt " | wc -l`;echo "PID: $1 $FCOUNT" | sort -nk3無論我向此服務器發送多少請求(),MacBook上的數字仍然是10。當然,我檢查并得到相同的答案。curl http://localhost:8080/reqActivity MonitorPS:我的第一個版本的代碼實際上正在使用,并且沒有關閉響應。也有同樣的情況。http.GetBody我的環境: ,macOS Big Sur 11.2.3go version go1.16.2 darwin/amd64有誰知道為什么文件描述號在我認為應該泄漏時保持靜止?我的 shell 腳本有問題嗎?還是Golang在里面做了一些技巧?謝謝!更新問題是我正在檢查命名的進程而不是我的文件夾名稱。Go真的給了我一個額外的程序,看起來像一個守護進程,它不能顯示fd細節。真正的程序清楚地顯示了fd泄漏。盡管如此,我從關于golang的GC的答案和評論中得到了一些知識。gogo我將結束這個問題。
查看完整描述

2 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

正如Burak Serdar所指出的那樣,在gc期間關閉打開的文件是可能的。這意味著主題行中提出的問題的答案 - “在某些情況下,Go 會自動關閉文件描述嗎?—是“是”。但在某些情況下,這里正在做很多繁重的工作。

垃圾回收實際發生的時間點通常很難預測(盡管您可以自己故意調用GC代碼)。終結器的運行點甚至更難預測,因為有些工作可能在單獨的goroutine中完成。有關詳細信息,請參閱如何停止 golang gc 并手動觸發它?,并注意 Go 的每個版本可能會更改有關 GC 內部的一些規則(盡管 的操作非常穩定)。GOGC


查看完整回答
反對 回復 2022-08-15
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

在Unix中,打開的文件由垃圾回收器關閉:

https://golang.org/src/os/file_unix.go 186號線


查看完整回答
反對 回復 2022-08-15
  • 2 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號