github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/osutils/testdata/locker/main.go (about) 1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "log" 7 "os" 8 "os/signal" 9 "syscall" 10 "time" 11 12 "github.com/ActiveState/cli/internal/osutils/lockfile" 13 ) 14 15 func main() { 16 c := make(chan os.Signal) 17 signal.Notify(c, os.Interrupt, syscall.SIGTERM) 18 19 ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(2*time.Minute)) 20 defer cancel() 21 go func() { 22 select { 23 case <-c: 24 case <-ctx.Done(): 25 } 26 cancel() 27 }() 28 29 if len(os.Args) < 3 { 30 fmt.Printf("two arguments required") 31 os.Exit(2) 32 } 33 keep := os.Args[2] == "keep" 34 pl, err := lockfile.NewPidLock(os.Args[1]) 35 if err != nil { 36 log.Fatalf("Could not open lock file: %s", os.Args[1]) 37 } 38 err = pl.TryLock() 39 if err != nil { 40 fmt.Println("DENIED") 41 return 42 } 43 44 fmt.Println("LOCKED") 45 46 <-ctx.Done() 47 fmt.Println("done") 48 49 pl.Close(keep) 50 }