Похоже, вы хотите убедиться, что дочерний процесс демонизирован - PEP 3143, на который я указываю, документирует и указывает на эталонную реализацию для этого, а также указывает на других.
Как только ваш процесс (все еще выполняется код Python) демонизируется, будь то с помощью средств, предлагаемых в PEP 3143 или других, вы можете os.execl (или другая функция os.exec...
) вашего целевого кода - - он запускает указанный целевой код в точно в том же процессе, который мы только что сказали, демонизируется, и поэтому он продолжает демонизироваться, как требуется.
На последнем шаге нельзя использовать subprocess
, потому что он должен запускаться в того же самого процесса (daemonized), перекрывая его исполняемый код - именно для этого нужны os.execl
и друзья.
Первый шаг, до демонизации, возможно, можно сделать через subprocess
, но это несколько неудобно (вам нужно поместить код daemonize-then-os.exec в отдельный .py
): чаще всего вам просто хочу os.fork
и немедленно демонизировать дочерний процесс.
subprocess
довольно удобен в качестве кросс-платформенного способа запуска других процессов, но он не может заменить старый добрый старый подход Unix "fork and exec" для продвинутых целей (таких как демонизация, в данном случае) - поэтому хорошо, что стандартная библиотека Python также позволяет вам делать это с помощью этих функций в модуле os
! -)