我试图阻止程序打开另一个已打开的实例,为此,我创建一个带有.lock扩展名的文件,并在退出程序时将其删除。然而,除了删除之外,一切都有效。
package main
import (
"os"
"os/signal"
"fmt"
)
func main() {
var test string
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
fmt.Println("Error removing file")
fmt.Scanf("%s", &test)
if lockstate {
var err = os.Remove("ms.lock")
if err != nil {
fmt.Println("Error removing file")
fmt.Scanf("%s", &test)
}
}
os.Exit(0)
}()
}
我尝试过通过ctrl+c按窗口右上角的关闭按钮退出,但它从未发送信号,信号os.Interrupt从未被捕获。这是什么原因呢?
另外,我需要信号是非特定于平台的,因此它应该适用于基于 Windows 和 UNIX 的系统。
智慧大石
相关分类