Запуск процесса и его уничтожение из приложения 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), но оно не работает.
Я хочу добавить, что мне может понадобиться вызывать / убивать этот процесс довольно часто, чтобы он мог привести к огромному количеству процессов зомби.
Как я могу убить процесс, не оставляя зомби-процесс позади?