| package daemon |
| |
| import ( |
| "fmt" |
| "syscall" |
| ) |
| |
| // ContainerKill send signal to the container |
| // If no signal is given (sig 0), then Kill with SIGKILL and wait |
| // for the container to exit. |
| // If a signal is given, then just send it to the container and return. |
| func (daemon *Daemon) ContainerKill(name string, sig uint64) error { |
| container, err := daemon.Get(name) |
| if err != nil { |
| return err |
| } |
| |
| // If no signal is passed, or SIGKILL, perform regular Kill (SIGKILL + wait()) |
| if sig == 0 || syscall.Signal(sig) == syscall.SIGKILL { |
| if err := container.Kill(); err != nil { |
| return fmt.Errorf("Cannot kill container %s: %s", name, err) |
| } |
| } else { |
| // Otherwise, just send the requested signal |
| if err := container.KillSig(int(sig)); err != nil { |
| return fmt.Errorf("Cannot kill container %s: %s", name, err) |
| } |
| } |
| container.LogEvent("kill") |
| return nil |
| } |