• runv kill 流程分析


    1、runv/kill.go

    Action: func(context *cli.Context)

    该函数做的工作很简单,就是通过grpc客户端,发送一个grpc请求而已,如下:

    c.Signal(netcontext.Background(), &types.SignalRequest{
    
        Id:    container,
        Pid:    "init",
        Signal:  uint32(signal),
    })
    

      

    2、runv/containerd/api/grpc/server/server.go

    func (s *apiServer) Signal(ctx context.Context, r *types.SignalRequest) (*types.SignalResponse, error)

    该函数的工作也非常简单,仅仅只是调用了函数s.sv.Signal(r.Id, r.Pid, int(r.Signal))而已,接着返回&types.SignalResponse{}

    3、runv/supervisor/supervisor.go

    func (sv *Supervisor) Signal(container, processId string, sig int) error

    首先调用p := sv.getProcess(container, processId)获取Process对象,如果p != nil,则调用p.signal(sig)

    4、runv/supervisor/process.go

    func (p *Process) signal(sig int) error

    如果p是init进程,则调用p.ownerCont.ownerPod.vm.KillContainer(p.ownerCont.Id, syscall.Signal(sig)) kill容器。不过runv对于kill其他进程还尚不支持。

  • 相关阅读:
    [CF1475F] Unusual Matrix
    [JXOI2018] 游戏
    [ZJOI2010] 排列计数
    [CF1474E] What Is It?
    [CF375D] Tree and Queries
    [CF519E] A and B and Lecture Rooms
    [CF321C] Ciel the Commander
    [CF1C] Ancient Berland Circus
    [CF321A] Ciel and Robot
    [CF1450C1] Errich-Tac-Toe (Easy Version)
  • 原文地址:https://www.cnblogs.com/YaoDD/p/5992756.html
Copyright © 2020-2023  润新知