fcntl 锁在 Go 中通过 execve 之后不生效的问题
fcntl 锁在 Go 中通过 execve 之后不生效的问题 背景 man 2 fcntl Record locks are not inherited by a child created via fork(2), but are preserved across an execve(2). 看到 fcntl 的介绍,我们想当然地认为 fcntl 的记录锁在 execve 之后都是能够保留的。 在我们使用 Go 来实现的时候,很快就发现了问题,请看如下代码: package main import ( "fmt" "log" "os" "runtime" "syscall" "time" ) func main() { fmt.Println("Begin") fd, err := syscall.Open("lock", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0777) if err != nil { log.Printf("%s", err) return } ft := &syscall.Flock_t{ Type: syscal...