forked from TrueCloudLab/rclone
33 lines
640 B
Go
33 lines
640 B
Go
|
//go:build windows
|
||
|
// +build windows
|
||
|
|
||
|
package operations
|
||
|
|
||
|
import (
|
||
|
"os/exec"
|
||
|
"syscall"
|
||
|
)
|
||
|
|
||
|
// Credit: https://github.com/golang/go/blob/6125d0c4265067cdb67af1340bf689975dd128f4/src/os/signal/signal_windows_test.go#L18
|
||
|
func sendInterrupt() error {
|
||
|
d, e := syscall.LoadDLL("kernel32.dll")
|
||
|
if e != nil {
|
||
|
return e
|
||
|
}
|
||
|
p, e := d.FindProc("GenerateConsoleCtrlEvent")
|
||
|
if e != nil {
|
||
|
return e
|
||
|
}
|
||
|
r, _, e := p.Call(syscall.CTRL_BREAK_EVENT, uintptr(syscall.Getpid()))
|
||
|
if r == 0 {
|
||
|
return e
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func setupCmd(cmd *exec.Cmd) {
|
||
|
(*cmd).SysProcAttr = &syscall.SysProcAttr{
|
||
|
CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP,
|
||
|
}
|
||
|
}
|