Skip to content
This repository has been archived by the owner on May 12, 2021. It is now read-only.

Commit

Permalink
containerd-shim-kata-v2: add the service Kill support
Browse files Browse the repository at this point in the history
Add the Kill api support to send signal to a given
container process.

Signed-off-by: ZeroMagic <[email protected]>
Signed-off-by: fupan.li <[email protected]>
  • Loading branch information
ZeroMagic authored and lifupan committed Nov 28, 2018
1 parent 9ee53be commit 5cc016c
Showing 1 changed file with 32 additions and 1 deletion.
33 changes: 32 additions & 1 deletion containerd-shim-v2/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -547,7 +547,38 @@ func (s *service) Resume(ctx context.Context, r *taskAPI.ResumeRequest) (*ptypes

// Kill a process with the provided signal
func (s *service) Kill(ctx context.Context, r *taskAPI.KillRequest) (*ptypes.Empty, error) {
return nil, errdefs.ErrNotImplemented
s.Lock()
defer s.Unlock()

signum := syscall.Signal(r.Signal)

c, err := s.getContainer(r.ID)
if err != nil {
return nil, err
}

processID := c.id
if r.ExecID != "" {
execs, err := c.getExec(r.ExecID)
if err != nil {
return nil, err
}
processID = execs.id
}

err = s.sandbox.SignalProcess(c.id, processID, signum, r.All)
if err != nil {
return nil, err
}

// Since the k8s will use the SIGTERM signal to stop a container by default, but
// some container processes would ignore this signal such as shell, thus it's better
// to resend another SIGKILL signal to make sure the container process terminated successfully.
if signum == syscall.SIGTERM {
err = s.sandbox.SignalProcess(c.id, processID, syscall.SIGKILL, r.All)
}

return empty, err
}

// Pids returns all pids inside the container
Expand Down

0 comments on commit 5cc016c

Please sign in to comment.