github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/osutils/lockfile/test/integration/pidlock_win_test.go (about)

     1  // +build windows
     2  
     3  package integration
     4  
     5  import (
     6  	"os"
     7  	"os/exec"
     8  	"syscall"
     9  	"testing"
    10  )
    11  
    12  func sendCtrlBreak(t *testing.T, pid int) {
    13  	d, e := syscall.LoadDLL("kernel32.dll")
    14  	if e != nil {
    15  		t.Fatalf("LoadDLL: %v\n", e)
    16  	}
    17  	p, e := d.FindProc("GenerateConsoleCtrlEvent")
    18  	if e != nil {
    19  		t.Fatalf("FindProc: %v\n", e)
    20  	}
    21  	r, _, e := p.Call(syscall.CTRL_BREAK_EVENT, uintptr(pid))
    22  	if r == 0 {
    23  		t.Fatalf("GenerateConsoleCtrlEvent: %v\n", e)
    24  	}
    25  }
    26  
    27  func interruptProcess(t *testing.T, p *os.Process) {
    28  	sendCtrlBreak(t, p.Pid)
    29  }
    30  
    31  func prepLockCmd(lockCmd *exec.Cmd) *exec.Cmd {
    32  	lockCmd.SysProcAttr = &syscall.SysProcAttr{
    33  		CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP,
    34  	}
    35  	return lockCmd
    36  }