Создайте процесс в Python, только если он не существует - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть сервер Python, которому в конечном итоге необходим фоновый процесс для выполнения действия.

Он создает дочерний процесс, который должен иметь возможность работать дольше, чем его родитель.Но он не должен создавать такой дочерний процесс, если он уже запущен (это может произойти, если его создал предыдущий родительский процесс).

Я могу представить несколько разных подходов для решения этой проблемы:

  1. Проверьте все текущие запущенные процессы перед созданием нового: Кроссплатформенный способ получения PID по имени процесса в python
  2. Запись файла при запуске дочернего процессаудалите его, когда это будет сделано.Проверьте файл перед созданием дочернего процесса.

Но ни один из них, похоже, не соответствует моим потребностям.Решение (1) не работает, если дочерний процесс является ответвлением своего родителя.Решение (2) некрасиво, оно выглядит склонным к сбою.

Было бы здорово предоставить фиксированный pid или имя при создании процесса, чтобы я всегда мог искать процесс в системе фиксированным способоми будьте уверены, работает он или нет.Но я не нашел способа сделать это.

1 Ответ

0 голосов
/ 19 февраля 2019

«Он создает дочерний процесс, который должен иметь возможность работать дольше, чем его родитель».Не.

Попросите долгожданного процесса обслуживания создать ребенка для вас.Поговорите с этой службой через доменный сокет Unix.Затем он может использоваться для передачи файловых дескрипторов ребенку.Служба также может гарантировать, что у нее только один ребенок.

Это шаблон, который можно использовать для устранения необходимости в детях, которые переживают своих родителей.

Использование имен команд упрощает выполнение DoS, просто создавая процесс с тем же именемэто ничего не делаетИспользование файлов PID неоднозначно из-за повторного использования PID.Только имея супервизора, который ожидает своих потомков, он может правильно перезапустить их, когда они выйдут, или убедиться, что они работают.

...