aboutsummaryrefslogtreecommitdiffstats
path: root/golib/eows/eows-signal.go
blob: 5db5366b0ce801f9d11d174160bd04d2b9e2c131 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// +build !windows

// Package eows is used to Execute commands Over WebSocket
package eows

import (
	"fmt"
	"os"
	"syscall"
)

// Signal sends a signal to the running command / process
func (e *ExecOverWS) Signal(signal string) error {
	var sig os.Signal
	switch signal {
	case "quit", "SIGQUIT":
		sig = syscall.SIGQUIT
	case "terminated", "SIGTERM":
		sig = syscall.SIGTERM
	case "interrupt", "SIGINT":
		sig = syscall.SIGINT
	case "aborted", "SIGABRT":
		sig = syscall.SIGABRT
	case "continued", "SIGCONT":
		sig = syscall.SIGCONT
	case "hangup", "SIGHUP":
		sig = syscall.SIGHUP
	case "killed", "SIGKILL":
		sig = syscall.SIGKILL
	case "stopped (signal)", "SIGSTOP":
		sig = syscall.SIGSTOP
	case "stopped", "SIGTSTP":
		sig = syscall.SIGTSTP
	case "user defined signal 1", "SIGUSR1":
		sig = syscall.SIGUSR1
	case "user defined signal 2", "SIGUSR2":
		sig = syscall.SIGUSR2
	default:
		return fmt.Errorf("Unsupported signal")
	}

	if e.proc == nil {
		return fmt.Errorf("Cannot retrieve process")
	}

	fmt.Printf("SEND signal %v to proc %v\n", sig, e.proc.Pid)
	return e.proc.Signal(sig)
}