Я пытаюсь порождать длинные процессы из приложения фляги. Итак, у меня есть основной процесс, который обрабатывает входящие веб-запросы и из которого я запускаю демоны, используя библиотеку python-daemon. Вот минимальный рабочий пример:
import os
import time
import daemon
import lockfile
def daemon_function():
return True
working_directory = os.path.dirname(os.path.abspath(__file__))
pid_file = os.path.join(working_directory,"my_daemon.pid")
daemon_context = daemon.DaemonContext(
working_directory=working_directory,
pidfile=lockfile.FileLock(pid_file),
)
pid = os.fork()
if pid == 0:
with daemon_context:
daemon_function()
time.sleep(10)
Когда я использую команду linux ps -ef
, когда основной процесс все еще выполняется, после завершения процесса демона я вижу такой вывод:
user 2484 1 0 09:38 ? 00:00:01 /lib/systemd/systemd --user
user 11269 6061 0 12:07 pts/2 00:00:00 bash
user 28817 11269 1 15:43 pts/2 00:00:00 python test_daemon.py
user 28818 28817 0 15:43 pts/2 00:00:00 [python] <defunct>
Причина, по которой я использую функцию fork перед оператором with daemon_context:
, заключается в том, что мне нужен основной процесс для продолжения.
Должен ли я беспокоиться о созданном несуществующем процессе (я могу порождать их много)? Как я мог избежать появления этого зомби?