Запуск процесса и его уничтожение из приложения Ruby on Rails, не выходя из процесса зомби

Я разрабатываю приложение Ruby on Rails. Частью функциональности является запуск и закрытие соединения с ведомым устройством Modbus через последовательный порт, получение данных и их сохранение в базе данных. Также я написал скрипт на python, который делает именно то, что мне нужно, поэтому я не хочу заново изобретать колесо и переписывать его в Ruby.

Моя идея состоит в том, чтобы запустить процесс, который будет выполнять скрипт Python и завершать процесс всякий раз, когда он больше не нужен.

Я запускаю процесс следующим образом, чтобы получить доступ к его pid:

def start
    ...
    @@pids[ object.id ] = IO.popen("python ./python_script_name.py").pid
    ...

@@ pids - это хеш, который хранит pids всех запущенных процессов с ключом как object.id (предполагается, что каждый объект может запустить только один процесс)

Когда я хочу закрыть соединение, я прекращаю процесс, как:

def stop
    ...
    pid = @@pids[ object.id ]
    system("kill #{pid}")

Это приводит к процессу зомби (виден послеps aux | grep python):

[python] <defunct>

Я пытался отправитьSIGCHLD приложение для передачи сигнала рельсам (так как оно является родителем ранее названного скрипта Python), но оно не работает.

Я хочу добавить, что мне может понадобиться вызывать / убивать этот процесс довольно часто, чтобы он мог привести к огромному количеству процессов зомби.

Как я могу убить процесс, не оставляя зомби-процесс позади?

Ответы на вопрос(1)

Ваш ответ на вопрос