我试图杀死一个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映像实际上并不是我的首选。否则,为什么我要在这里问问题。
此外,我很好奇为什么无法将其杀死?
谢谢
答案 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/