为什么我不能在k8s pod中杀死python3进程?

时间:2020-02-04 22:42:58

标签: python python-3.x kubernetes kill kubernetes-pod

我试图杀死一个python进程:

# ps aux | grep python
root           1 12.6  2.1 2234740 1332316 ?     Ssl  20:04  19:36 /usr/bin/python3 /batch/run.py
root         490  0.0  0.0  11472  1012 pts/0    S+   22:39   0:00 grep --color=auto python
# sudo kill -9 1
# ps aux | grep python
root           1 12.6  2.1 2234740 1333372 ?     Ssl  20:04  19:38 /usr/bin/python3 /batch/run.py
root         494  0.0  0.0  11472  1088 pts/0    S+   22:39   0:00 grep --color=auto python

知道为什么吗?谢谢。 调试它还需要其他信息吗?

更新

实际上,我不想杀死该容器或吊舱。我直接在/usr/local/lib/python3.6/dist-packages/中修改了python代码。如果pod重新启动,我的更改将消失。

我需要修改容器中的第三方代码(而不是我自己的代码),然后直接查看结果。

更新我自己的代码并重新部署docker映像实际上并不是我的首选。否则,为什么我要在这里问问题。

此外,我很好奇为什么无法将其杀死?

谢谢

2 个答案:

答案 0 :(得分:0)

容器通常通常是不可变的。一旦启动,您将无法更改正在运行的代码,而如果没有非常特殊的处理,您可能没有(也不应该这样做)。如评论中所述,您可以通过构建新的容器映像并更新您的Deployment(或类似版本)以使用该映像来在Kubernetes中编辑代码。然后它将更新您所有的吊舱。

答案 1 :(得分:0)

正如@coderanger所提到的,容器的概念是不可变的。 在Kubernetes /容器环境中,您尝试执行的操作不是一个好习惯。

但是...

有时需要某种魔术来使飞机保持飞行状态...有些选项可以为您提供帮助:

1。重建容器图像

在这种情况下,最好的解决方案是根据当前运行的映像重建容器映像。您可以将此图像与主要工作负载分开运行以测试更改。 在这种情况下,这是最好的方法,因为您将保留图像中的更改和历史记录以进行滚动更新。

2。杀死pid的解决方法

我已经在带有主管的容器运行烧瓶中进行了测试。

您可以使用SIGHUP信号重新启动容器内的过程:

SIGHUP -SIGHUP信号使进程与父进程断开连接。这也可用于重新启动进程。例如,“ killall -SIGHUP compiz”将重新启动Compiz。这对于有内存泄漏的守护程序很有用。 ... SIGHUP 在控制终端上检测到P1990术语挂断 或控制过程终止

在您的容器内,运行:

kill -SIGHUP <PID>kill -1 <PID>

来源: -http://man7.org/linux/man-pages/man7/signal.7.html https://www.linux.org/threads/kill-signals-and-commands-revised.11625/