如何杀死容器内的进程? Docker 顶级命令
How to kill process inside container? Docker top command
我在 docker 网站上有来自官方指南的简单示例。
我运行以下命令:
sudo docker run -d ubuntu:latest /bin/sh -c "while true; do echo hello world; sleep 1; done"
a66asdasdhqie123...
然后从创建的容器中获取一些输出:
sudo docker logs a66
hello
hello
hello
...
然后我查找一个容器的运行进程:
sudo docker top a66
UID PID PPID C STIME TTY TIME CMD
root 25055 15152 0 20:07 ? 00:00:00 /bin/sh -c while true; do echo hello world; sleep 1; done
root 25295 25055 0 20:10 ? 00:00:00 sleep 1
接下来尝试杀掉容器的第一个进程:
sudo docker exec a66 kill -9 25055
但是在我完成之后没有任何改变。进程仍然有效,每秒输出 "hello"。我做错了什么?
检查这个:
ps | grep -i a66 | tr -s ' '|cut -f2 -d' '|
{
while read line;
do kill -9 $line;
done
}
要理解这一点,请从每个管道的左侧到末端执行命令 (|)
更简单的选项:
kill $(pidof a66)
当我重现您的情况时,我看到 docker top <container>
和 docker exec -it <container> ps -aux
之间有不同的 PID。当您执行 docker exec
时,命令在容器内执行 => 应该使用容器的 pid。否则你可以在没有 docker 的情况下直接从主机进行杀戮,在你的情况下:sudo kill -9 25055
.
我花了一些时间才找到正确的答案,但您必须从容器内管理这个过程。当您从主机 运行 docker top a66
时,PID 来自您的主机,但如果使用 Cygwin 则情况并非如此。无论如何,您将需要 bash
或您有什么东西回到您的容器中,并在容器中使用 ps aux
和 kill
之类的命令来查找和管理相同的不同 PID在那里处理。
我一直在寻找类似的东西,但找不到,然后我就这样做了:
[root@notebook ~]# docker exec -it tadeu_debian ps aux | grep ping |
awk '{ print }' | xargs -I{} docker exec -i tadeu_debian kill -9
从 Docker 到一个 xargs 是两个 "execs"。
好吧,我希望这对某人有所帮助!
构建 Docker 时,使用此命令:
RUN apt-get install lsof
然后在py文件中你可以使用:
os.system("lsof /dev/nvidia* | awk '{print }' | xargs -I {} kill {}")
记住:此命令会终止 GPU 上的所有进程
我在 docker 网站上有来自官方指南的简单示例。
我运行以下命令:
sudo docker run -d ubuntu:latest /bin/sh -c "while true; do echo hello world; sleep 1; done"
a66asdasdhqie123...
然后从创建的容器中获取一些输出:
sudo docker logs a66
hello
hello
hello
...
然后我查找一个容器的运行进程:
sudo docker top a66
UID PID PPID C STIME TTY TIME CMD
root 25055 15152 0 20:07 ? 00:00:00 /bin/sh -c while true; do echo hello world; sleep 1; done
root 25295 25055 0 20:10 ? 00:00:00 sleep 1
接下来尝试杀掉容器的第一个进程:
sudo docker exec a66 kill -9 25055
但是在我完成之后没有任何改变。进程仍然有效,每秒输出 "hello"。我做错了什么?
检查这个:
ps | grep -i a66 | tr -s ' '|cut -f2 -d' '|
{
while read line;
do kill -9 $line;
done
}
要理解这一点,请从每个管道的左侧到末端执行命令 (|)
更简单的选项:
kill $(pidof a66)
当我重现您的情况时,我看到 docker top <container>
和 docker exec -it <container> ps -aux
之间有不同的 PID。当您执行 docker exec
时,命令在容器内执行 => 应该使用容器的 pid。否则你可以在没有 docker 的情况下直接从主机进行杀戮,在你的情况下:sudo kill -9 25055
.
我花了一些时间才找到正确的答案,但您必须从容器内管理这个过程。当您从主机 运行 docker top a66
时,PID 来自您的主机,但如果使用 Cygwin 则情况并非如此。无论如何,您将需要 bash
或您有什么东西回到您的容器中,并在容器中使用 ps aux
和 kill
之类的命令来查找和管理相同的不同 PID在那里处理。
我一直在寻找类似的东西,但找不到,然后我就这样做了:
[root@notebook ~]# docker exec -it tadeu_debian ps aux | grep ping | awk '{ print }' | xargs -I{} docker exec -i tadeu_debian kill -9
从 Docker 到一个 xargs 是两个 "execs"。
好吧,我希望这对某人有所帮助!
构建 Docker 时,使用此命令:
RUN apt-get install lsof
然后在py文件中你可以使用:
os.system("lsof /dev/nvidia* | awk '{print }' | xargs -I {} kill {}")
记住:此命令会终止 GPU 上的所有进程