Docker在容器里杀死进程

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

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

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

kill processId但收到:

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

我错过了什么吗? 我知道Docker显示主机内部的top命令和容器内的ps aux不同的进程ID( 如何杀死容器内的进程?Docker顶部命令 ),但我从容器内部运行这个?

这种反应是因为你正在试图杀死的进程在杀死它的时刻并不存在。 例如,如果启动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 

正如你所看到的,你不能杀死它。 无论如何,如果你想certificate你可以杀死进程,你可以这样做:

 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 

希望能帮助到你。