1 回答

TA貢獻1946條經驗 獲得超3個贊
我認為這是因為你的 main 函數在啟動 goroutine 后不久就存在了。如果 main 函數結束,所有正在運行的 goroutine 也會死亡。
這是適合我的代碼:
package main
import (
"fmt"
"os"
"os/signal"
"sync"
)
func main() {
exitsig := make(chan os.Signal, 1)
signal.Notify(exitsig, os.Interrupt)
var (
lockstate bool = false
)
if _, err := os.Stat("ms.lock"); err == nil {
return
} else if os.IsNotExist(err) {
var file, err = os.Create("ms.lock")
if err != nil {
return
}
file.Close()
lockstate = true
}
go func() {
<-exitsig
if lockstate {
var err = os.Remove("ms.lock")
if err != nil {
fmt.Println("Error removing file: ", err)
}
}
os.Exit(0)
}()
wg := &sync.WaitGroup{}
wg.Add(1)
wg.Wait()
}
我添加了等待組以在主線程中等待。在 MacOS 上運行良好 - 創建ms.lock文件并等待。使用 Cmd + C 殺死它會刪除該文件。
只要信號響起,就可以在任何地方工作。
- 1 回答
- 0 關注
- 147 瀏覽
添加回答
舉報