[英]Why I cannot kill python3 process in k8s 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
知道為什么嗎? 謝謝。 調試這個需要任何其他信息嗎?
更新
事實上,我不想殺死容器或 pod。 我直接修改了/usr/local/lib/python3.6/dist-packages/
的python代碼。 如果 pod 重新啟動,我的更改將消失。
我需要在容器中修改第三方代碼(不是我自己的代碼)並直接查看結果。
事實上,更新我自己的代碼並重新部署 docker 鏡像並不是我的第一選擇。 否則,我為什么在這里提問。
另外,我很好奇為什么它不能被殺死?
謝謝
正如@coderanger 所提到的,容器具有不可變的概念。 您嘗試做的事情在 Kubernetes/容器環境中不是一個好習慣。
但...
有時需要一種魔法才能讓飛機保持飛行狀態……有一些選項可以幫助您:
1. 重建容器鏡像
在這種情況下,最好的解決方案是基於當前運行的鏡像重建容器鏡像。 您可以與主要工作負載分開運行此映像以測試更改。 在這種情況下,這是最好的方法,因為您將保留圖像中的更改和滾動更新的歷史記錄。
2.解決方法殺死pid
我已經在運行帶有 supervisord 的燒瓶的容器中進行了測試。
您可以使用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/
容器通常是不可變的。 一旦開始,您就無法更改正在運行的代碼,除非對其進行非常特殊的處理,而您可能沒有(也不應該)。 如評論中所述,您可以通過構建新的容器映像並更新您的部署(或類似)以使用該映像來編輯 Kubernetes 中的代碼。 然后它將更新您的所有 pod。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.