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 关注
- 116 浏览
添加回答
举报