maximkv25
@maximkv25
web-developer

Почему убивается pid?

Все привет, пишу простого демона для одной ф-ции, которая будет парсить
Вообщем pid у меня пишется и сразу пропадает, в ф-ции которую вызываю бесконечный цикл, вообщем код больше скажет чем я
import os
import sys
from test import test


pidfile = '/home/maxim/Projects/code/pidfile.pid'
sf = '/dev/null'

class Daemon:
    def __init__(self, stdin=sf, stdout=sf, stderr=sf):
        self.stdin = stdin
        self.stdout = stdout
        self.stderr = stderr

    def daemonize(stdin, stdout, stderr):
            try:
                pid = os.fork()
                if pid > 0:
                    sys.exit(0)
            except OSError as e:
                print(str(e))
                sys.exit(1)

            # decouple from parent environment
            os.chdir("/")
            os.setsid()
            os.umask(0)

            # do second fork
            try:
                pid = os.fork()
                if pid > 0:
                    # exit from second parent
                    sys.exit(0)
            except OSError as e:
                print(str(e))
                sys.exit(1)

            # redirect standard file descriptors
            sys.stdout.flush()
            sys.stderr.flush()
            si = open(stdin, 'r')
            so = open(stdout, 'a+')
            se = open(stderr, 'a+')
            os.dup2(si.fileno(), 0)  # sys.stdin
            os.dup2(so.fileno(), 1)  # sys.stdout
            os.dup2(se.fileno(), 2)  # sys.stderr


            # write pidfile
            with open(pidfile, 'w+') as f:
                f.write(str(os.getpid()))

    def start():
        Daemon.daemonize(stdin=sf, stdout=sf, stderr=sf)
        Daemon.test()

    def test():
        while True:
            with open('/home/maxim/Projects/code/file.txt', 'w+') as f:
                f.write('test')
            sleep(2)


Daemon.start()
  • Вопрос задан
  • 354 просмотра
Пригласить эксперта
Ответы на вопрос 1
@dmtrrr
Backend developer
Зачем так делать?
if pid > 0:
    sys.exit(0)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы