У меня проблемы с использованием Python API, который вызывает неубиваемые процессы. Я использую один процесс для выполнения API. Это хорошо работает, если API может работать правильно. Тем не менее, когда API не может установить sh соединение, возникает проблема.
У меня есть основной процесс, который запускает все другие процессы API:
> ps ax | grep python
3431 s000 S+ 0:06.14 .../python3.7 -u .../main.py -> Main process
При успешном соединении с API (например, один раз), я получаю следующее:
> ps ax | grep python
3431 s000 S+ 0:12.59 .../python3.7 -u .../main.py -> Main process
3506 s000 S+ 0:00.34 .../python3.7 -u .../main.py -> API connection process
Закрытие успешного соединения убивает процесс API, как и ожидалось. Процессы zomb ie не возникают.
Однако, если я начну использовать 3 экземпляра API (это возможно), API сможет правильно соединиться с двумя экземплярами / процессами, но завершится сбоем в одном , Когда все процессы запущены, я получаю следующее:
> ps ax | grep python
3431 s000 R+ 1:00.51 .../python3.7 -u .../main.py -> Main process
3594 s000 U+ 0:00.02 .../python3.7 -u .../main.py -> API connection process, where connection FAILED
3595 s000 R+ 0:03.10 .../python3.7 -u .../main.py -> API connection process, where connection was established
3596 s000 S+ 0:01.69 .../python3.7 -u .../main.py -> API connection process, where connection was established
Закрытие подключений API вызывает у меня проблемы:
> ps ax | grep python
3431 s000 R+ 2:52.01 .../python3.7 -u .../main.py -> Main process
3594 s000 U+ 0:00.02 .../python3.7 -u .../main.py -> API connection process, where connection FAILED
3595 s000 Z+ 0:00.00 (python3.7) -> API connection process (zombie), where connection was established
3596 s000 Z+ 0:00.00 (python3.7) -> API connection process (zombie), where connection was established
> ps aux | grep -w Z
3595 0,0 0,0 0 0 s000 Z+ 10:04 0:00.00 (python3.7) -> API process where connection was established
3596 0,0 0,0 0 0 s000 Z+ 10:04 0:00.00 (python3.7) -> API process where connection was established
Я попробовал следующие рекомендации из предыдущих постов из стека Переполнение, но безуспешно. Это была моя лучшая попытка, которая не сработала:
> kill -9 3594 -> kill API process where connection FAILED
> ps ax | grep python
3431 s000 R+ 1:00.51 .../python3.7 -u .../main.py -> Main process
3594 s000 ?E+ 0:00.00 (python3.7) -> API connection process, where connection FAILED
3595 s000 z+ 0:00.00 (python3.7) -> API connection process, where connection was established
3596 s000 z+ 0:00.00 (python3.7) -> API connection process, where connection was established
> ps aux | grep -w Z
3595 0,0 0,0 0 0 s000 Z+ 10:04 0:00.00 (python3.7) -> API connection process, where connection was established
3596 0,0 0,0 0 0 s000 Z+ 10:04 0:00.00 (python3.7) -> API connection process, where connection was established
> kill -1 3431 -> Kill main process
> ps aux | grep -w Z
no processes
> ps ax | grep python
3594 s000 ?E+ 0:00.00 (python3.7) -> API connection process, where connection FAILED
> kill -9 3594
> ps ax | grep python
3594 s000 ?E+ 0:00.00 (python3.7) -> API connection process, where connection FAILED
> ps o ppid 3594
PID 1
Процессы запускаются с помощью метода fork (с использованием библиотеки Python multiprocessing
). Проблема наличия этих неубиваемых процессов заключается в том, что в основном процессе у меня есть соединение с веб-сокетом, и, хотя я и убиваю основной процесс, этот неубиваемый процесс имеет какое-то отношение к нему, что позволяет соединению с веб-сокетом оставаться живым вечно. Я никак не могу убить этот процесс. Единственный способ - принудительно перезагрузить компьютер ...
Любая помощь, пожалуйста?