Я делаю это, в основном делегирую задачу системе управления процессом, как http://supervisord.org/index.html
Вы создаете файл конфигурации для процесса:
[program:foo]
command=/bin/cat
и затем вы будете запускать / останавливать , как supervisordctl stop foo
supervisor будет выполнять эту работу в зависимости от настроек, которые вы установили в supervisor.conf. Другие преимущества: если программа аварийно завершает работу из-за критической ошибки, она будет автоматически запускаться, если вы настроили это в файле.