zoukankan      html  css  js  c++  java
  • 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其他进程还尚不支持。

  • 相关阅读:
    mysql 查询优化 ~ select count 知多少
    mongodb 案例 ~ 经典故障案例
    printk 驱动调试
    21天学通C++学习笔记(七):函数
    OPC UA
    MQTT
    分库分表
    水平、垂直权限问题(横向越权与纵向越权)
    数据库中的行转列和列转行
    面试知识点
  • 原文地址:https://www.cnblogs.com/YaoDD/p/5992756.html
Copyright © 2011-2022 走看看