12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- // +build linux
- package runc
- 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",
- ArgsUsage: `<container-id> <signal>
- Where "<container-id>" is the name for the instance of the container and
- "<signal>" is the signal to be sent to the init process.
-
- For example, if the container id is "ubuntu01" the following will send a "KILL"
- signal to the init process of the "ubuntu01" container:
-
- # runc kill ubuntu01 KILL`,
- 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
- }
|