github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/cmd/podman/kill.go (about) 1 package main 2 3 import ( 4 "github.com/containers/libpod/cmd/podman/cliconfig" 5 "github.com/containers/libpod/pkg/adapter" 6 "github.com/containers/libpod/pkg/util" 7 "github.com/opentracing/opentracing-go" 8 "github.com/pkg/errors" 9 "github.com/spf13/cobra" 10 ) 11 12 var ( 13 killCommand cliconfig.KillValues 14 15 killDescription = "The main process inside each container specified will be sent SIGKILL, or any signal specified with option --signal." 16 _killCommand = &cobra.Command{ 17 Use: "kill [flags] CONTAINER [CONTAINER...]", 18 Short: "Kill one or more running containers with a specific signal", 19 Long: killDescription, 20 RunE: func(cmd *cobra.Command, args []string) error { 21 killCommand.InputArgs = args 22 killCommand.GlobalFlags = MainGlobalOpts 23 killCommand.Remote = remoteclient 24 return killCmd(&killCommand) 25 }, 26 Args: func(cmd *cobra.Command, args []string) error { 27 return checkAllLatestAndCIDFile(cmd, args, false, false) 28 }, 29 Example: `podman kill mywebserver 30 podman kill 860a4b23 31 podman kill --signal TERM ctrID`, 32 } 33 ) 34 35 func init() { 36 killCommand.Command = _killCommand 37 killCommand.SetHelpTemplate(HelpTemplate()) 38 killCommand.SetUsageTemplate(UsageTemplate()) 39 flags := killCommand.Flags() 40 41 flags.BoolVarP(&killCommand.All, "all", "a", false, "Signal all running containers") 42 flags.StringVarP(&killCommand.Signal, "signal", "s", "KILL", "Signal to send to the container") 43 flags.BoolVarP(&killCommand.Latest, "latest", "l", false, "Act on the latest container podman is aware of") 44 45 markFlagHiddenForRemoteClient("latest", flags) 46 } 47 48 // killCmd kills one or more containers with a signal 49 func killCmd(c *cliconfig.KillValues) error { 50 if c.Bool("trace") { 51 span, _ := opentracing.StartSpanFromContext(Ctx, "killCmd") 52 defer span.Finish() 53 } 54 55 // Check if the signalString provided by the user is valid 56 // Invalid signals will return err 57 killSignal, err := util.ParseSignal(c.Signal) 58 if err != nil { 59 return err 60 } 61 62 runtime, err := adapter.GetRuntime(getContext(), &c.PodmanCommand) 63 if err != nil { 64 return errors.Wrapf(err, "could not get runtime") 65 } 66 defer runtime.DeferredShutdown(false) 67 68 ok, failures, err := runtime.KillContainers(getContext(), c, killSignal) 69 if err != nil { 70 return err 71 } 72 return printCmdResults(ok, failures) 73 }