Не могу убить процесс macOS python - PullRequest
1 голос
/ 17 февраля 2020

У меня проблемы с использованием 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). Проблема наличия этих неубиваемых процессов заключается в том, что в основном процессе у меня есть соединение с веб-сокетом, и, хотя я и убиваю основной процесс, этот неубиваемый процесс имеет какое-то отношение к нему, что позволяет соединению с веб-сокетом оставаться живым вечно. Я никак не могу убить этот процесс. Единственный способ - принудительно перезагрузить компьютер ...

Любая помощь, пожалуйста?

...