//go:build !windows package processlock import ( "errors" "fmt" "os" "golang.org/x/sys/unix" ) func lockFile(file *os.File) error { err := unix.Flock(int(file.Fd()), unix.LOCK_EX|unix.LOCK_NB) if errors.Is(err, unix.EWOULDBLOCK) || errors.Is(err, unix.EAGAIN) { return ErrLocked } if err != nil { return fmt.Errorf("获取进程锁失败:%w", err) } return nil } func unlockFile(file *os.File) error { if err := unix.Flock(int(file.Fd()), unix.LOCK_UN); err != nil { return fmt.Errorf("释放进程锁失败:%w", err) } return nil }