//go:build !windows package pid import ( "os" "skapp/pkg/logger" "syscall" ) func (p *PidLock) Lock() error { _, err := os.Stat(p.file) if err == nil { os.Exit(0) } pidFileHandle, err := os.OpenFile(pidFile, os.O_RDONLY|os.O_CREATE, os.ModePerm) if err != nil { logger.Log.Fatalf("启动失败 进程锁文件 .pid 创建失败") return LockFail } err = syscall.Flock(int(pidFileHandle.Fd()), syscall.LOCK_EX|syscall.LOCK_NB) if err != nil { logger.Log.Fatalf("启动失败 进程锁文件 .pid 被占用") return LockFail } p.lock = pidFileHandle return nil } func (p *PidLock) UnLock() { _ = syscall.Flock(int(p.lock.Fd()), syscall.LOCK_UN) _ = p.lock.Close() _ = os.Remove(p.file) }