Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 如何杀死容器内的进程?Docker最高指挥部_Unix_Command Line_Process_Docker_Kill - Fatal编程技术网

Unix 如何杀死容器内的进程?Docker最高指挥部

Unix 如何杀死容器内的进程?Docker最高指挥部,unix,command-line,process,docker,kill,Unix,Command Line,Process,Docker,Kill,我有一个简单的例子,来自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

我有一个简单的例子,来自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
然后我查找容器的运行进程:

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
接下来,我尝试终止容器的第一个进程:

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
docker-exec-it-ps-aux之间存在不同的PID。执行
docker exec
时,命令在容器内执行=>应使用容器的pid。否则,您可以在没有docker的情况下直接从主机执行kill,在您的情况下:
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$2}'| xargs-I{}docker exec-I tadeu_debian kill-9

是Docker e one xargs的两名“执行官”


好吧,我希望这能帮助别人

构建Docker时,请使用以下命令:

RUN apt-get install lsof
然后在py文件中,您可以使用:

os.system("lsof /dev/nvidia* | awk '{print $2}' | xargs -I {} kill {}")

记住:这个命令杀死GPU上的所有进程

返回状态是什么?问题是为什么我的方式不起作用,而不是如何做不同的。对不起,但我不喜欢你建议的方式-它很长,而且不知所措。可能还有更简单的选择吗?我已经编辑了答案(如果需要,添加sudo)。希望这能有所帮助。这个答案显然是错误的。Docker容器ID不是由
ps
打印的。通常情况下,您会使用
Docker kill
终止进程。为什么容器内部的ID和顶部的PID不同?“top”命令在主机上显示PID?(很抱歉,我现在在手机上无法查看答案)是的,
docker-top
显然显示主机的PID。您可以从容器中获取PID作为:
docker-inspect--format{{.State.PID}