mirror of
https://github.com/opencontainers/runc.git
synced 2026-07-11 14:13:58 +08:00
a7278cad98
Closes #532 This requires the container id to always be passed to all runc commands as arg one on the cli. This was the result of the last OCI meeting and how operations work with the spec. Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
88 lines
1.9 KiB
Go
88 lines
1.9 KiB
Go
// +build linux
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
"syscall"
|
|
|
|
"github.com/codegangsta/cli"
|
|
)
|
|
|
|
var signalMap = map[string]syscall.Signal{
|
|
"ABRT": syscall.SIGABRT,
|
|
"ALRM": syscall.SIGALRM,
|
|
"BUS": syscall.SIGBUS,
|
|
"CHLD": syscall.SIGCHLD,
|
|
"CLD": syscall.SIGCLD,
|
|
"CONT": syscall.SIGCONT,
|
|
"FPE": syscall.SIGFPE,
|
|
"HUP": syscall.SIGHUP,
|
|
"ILL": syscall.SIGILL,
|
|
"INT": syscall.SIGINT,
|
|
"IO": syscall.SIGIO,
|
|
"IOT": syscall.SIGIOT,
|
|
"KILL": syscall.SIGKILL,
|
|
"PIPE": syscall.SIGPIPE,
|
|
"POLL": syscall.SIGPOLL,
|
|
"PROF": syscall.SIGPROF,
|
|
"PWR": syscall.SIGPWR,
|
|
"QUIT": syscall.SIGQUIT,
|
|
"SEGV": syscall.SIGSEGV,
|
|
"STKFLT": syscall.SIGSTKFLT,
|
|
"STOP": syscall.SIGSTOP,
|
|
"SYS": syscall.SIGSYS,
|
|
"TERM": syscall.SIGTERM,
|
|
"TRAP": syscall.SIGTRAP,
|
|
"TSTP": syscall.SIGTSTP,
|
|
"TTIN": syscall.SIGTTIN,
|
|
"TTOU": syscall.SIGTTOU,
|
|
"UNUSED": syscall.SIGUNUSED,
|
|
"URG": syscall.SIGURG,
|
|
"USR1": syscall.SIGUSR1,
|
|
"USR2": syscall.SIGUSR2,
|
|
"VTALRM": syscall.SIGVTALRM,
|
|
"WINCH": syscall.SIGWINCH,
|
|
"XCPU": syscall.SIGXCPU,
|
|
"XFSZ": syscall.SIGXFSZ,
|
|
}
|
|
|
|
var killCommand = cli.Command{
|
|
Name: "kill",
|
|
Usage: "kill sends the specified signal (default: SIGTERM) to the container's init process",
|
|
Action: func(context *cli.Context) {
|
|
container, err := getContainer(context)
|
|
if err != nil {
|
|
fatal(err)
|
|
}
|
|
|
|
sigstr := context.Args().Get(1)
|
|
if sigstr == "" {
|
|
sigstr = "SIGTERM"
|
|
}
|
|
|
|
signal, err := parseSignal(sigstr)
|
|
if err != nil {
|
|
fatal(err)
|
|
}
|
|
|
|
if err := container.Signal(signal); err != nil {
|
|
fatal(err)
|
|
}
|
|
},
|
|
}
|
|
|
|
func parseSignal(rawSignal string) (syscall.Signal, error) {
|
|
s, err := strconv.Atoi(rawSignal)
|
|
if err == nil {
|
|
return syscall.Signal(s), nil
|
|
}
|
|
signal, ok := signalMap[strings.TrimPrefix(strings.ToUpper(rawSignal), "SIG")]
|
|
if !ok {
|
|
return -1, fmt.Errorf("unknown signal %q", rawSignal)
|
|
}
|
|
return signal, nil
|
|
}
|