【问题标题】:Docker kill process inside containerDocker杀死容器内的进程
【发布时间】:2017-10-24 12:18:27
【问题描述】:

我使用docker exec -it container-name bash 执行到 Docker 容器中

在容器内我运行命令ps aux | grep processName

我收到一个 PID,然后我运行:

kill processId 但收到:

-bash: kill: (21456) - No such process

我错过了什么吗?我知道 Docker 从主机内部的top 命令和容器内部的ps aux (How to kill process inside container? Docker top command) 显示不同的进程 ID,但我是从容器内部运行它的?

【问题讨论】:

    标签: bash docker kill


    【解决方案1】:

    该响应是因为您尝试终止的进程在终止时不存在。例如,如果你启动ps aux,你可以在容器内得到这样的输出(当然取决于容器):

    oot@69fbbc0ff80d:/# ps aux
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.0  18400  3424 pts/0    Ss   13:55   0:00 bash
    root        15  0.0  0.0  36840  2904 pts/0    R+   13:57   0:00 ps aux
    

    然后,如果您尝试使用 PID 15 终止进程,则会收到错误消息,因为 PID 15 在尝试终止进程时已完成。 ps 命令在向您显示进程信息后终止。所以:

    root@69fbbc0ff80d:/# kill 15
    bash: kill: (15) - No such process
    

    在 docker 容器中,除了根进程 (id 1) 之外,您可以像平常一样杀死进程。你不能杀死它:

    root@69fbbc0ff80d:/# ps aux
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.0  18400  3424 pts/0    Ss   13:55   0:00 bash
    root        16  0.0  0.0  36840  2952 pts/0    R+   13:59   0:00 ps aux
    root@69fbbc0ff80d:/# kill 1
    root@69fbbc0ff80d:/# ps aux
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.0  18400  3424 pts/0    Ss   13:55   0:00 bash
    root        17  0.0  0.0  36840  2916 pts/0    R+   13:59   0:00 ps aux
    

    如您所见,您无法杀死它。无论如何,如果你想证明你可以杀死进程,你可以这样做:

    root@69fbbc0ff80d:/# ps aux
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.0  18400  3424 pts/0    Ss   13:55   0:00 bash
    root        18  0.0  0.0  36840  3064 pts/0    R+   14:01   0:00 ps aux
    root@69fbbc0ff80d:/# sleep 1000 &
    [1] 19
    root@69fbbc0ff80d:/# ps aux
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.0  18400  3424 pts/0    Ss   13:55   0:00 bash
    root        19  0.0  0.0   4372   724 pts/0    S    14:01   0:00 sleep 1000
    root        20  0.0  0.0  36840  3016 pts/0    R+   14:01   0:00 ps aux
    root@69fbbc0ff80d:/# kill 19
    root@69fbbc0ff80d:/# ps aux
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.0  18400  3424 pts/0    Ss   13:55   0:00 bash
    root        21  0.0  0.0  36840  2824 pts/0    R+   14:01   0:00 ps aux
    [1]+  Terminated              sleep 1000
    

    希望对你有帮助。

    【讨论】:

    • 谢谢奥斯卡。看来我引用的 PID 是错误的。在 Docker 容器中看到如此小的 PID 与通常在主机中的 PID 相比要高得多,这很奇怪。
    猜你喜欢
    • 1970-01-01
    • 2015-03-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    相关资源
    最近更新 更多