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  }