Python 이 데 몬 을 어떻게 실현 하 는 지 예시

필드 설정:
python 서비스 프로그램 을 만 들 었 고 명령 행 에서 시 작 했 습 니 다.명령 행 세 션 은 터미널 에 의 해 제어 되 었 습 니 다.python 서 비 스 는 터미널 프로그램의 키 프로 세 스 가 되 었 습 니 다.따라서 터미널 을 닫 으 면 이 명령 행 프로그램 도 닫 힙 니 다.
python 서 비 스 를 터미널 의 영향 을 받 지 않 고 상주 시 키 려 면 데 몬 으로 바 꿔 야 합 니 다.
데 몬 프로 세 스 는 Daemon 프로그램 으로 시스템 배경 에서 실행 되 는 프로그램 입 니 다.터미널 을 제어 하고 주기 적 인 작업 이나 트리거 이 벤트 를 수행 합 니 다.흔히 볼 수 있 는 httpd,syslogd,systemd,dockerd 등'd'자모 로 끝 납 니 다.
코드 구현
python 은 데 몬 을 간결 하 게 구현 할 수 있 습 니 다.코드 와 설명 을 먼저 드 리 겠 습 니 다.

# coding=utf8
import os
import sys
import atexit


def daemonize(pid_file=None):
 """
       
 :param pid_file:     id   
 :return:
 """
 #     fork       
 pid = os.fork()
 #     pid   0,     0
 if pid:
 #      ,sys.exit()   os._exit()              
 sys.exit(0)

 #                ,         ,            
 os.chdir('/')
 #            umask(      ),   0(    ),          
 os.umask(0)
 #                  
 os.setsid()

 #    ,    2 fork,          ,          
 _pid = os.fork()
 if _pid:
 #      
 sys.exit(0)

 #   ,            ,          、  、      (         ,           print      )

 #       ,       
 sys.stdout.flush()
 sys.stderr.flush()

 # dup2                ,    /dev/nul,         
 with open('/dev/null') as read_null, open('/dev/null', 'w') as write_null:
 os.dup2(read_null.fileno(), sys.stdin.fileno())
 os.dup2(write_null.fileno(), sys.stdout.fileno())
 os.dup2(write_null.fileno(), sys.stderr.fileno())

 #   pid  
 if pid_file:
 with open(pid_file, 'w+') as f:
  f.write(str(os.getpid()))
 #       ,         pid  
 atexit.register(os.remove, pid_file)
데 몬 의 작성 절 차 를 요약 합 니 다:
  • fork 자식 프로 세 스,부모 프로 세 스 종료
  • 하위 프로 세 스 변경 작업 디 렉 터 리(chdir),파일 권한 마스크(umask),프로 세 스 그룹 과 세 션 그룹(setsid)
  • 하위 프로 세 스 fork 손자 프로 세 스,하위 프로 세 스 종료
  • 손자 프로 세 스 리 셋 버퍼,표준 입 출력/오류(일반적으로/dev/null,즉 버 림)
  • pid 기록 파일
  • 몇 가지 요점 을 이해 하 다
    왜 포크 를 두 번 해?
    첫 번 째 포크 는 터미널 제어 에서 벗 어 나 기 위 한 마수 입 니 다.부모 프로 세 스 가 종료 한 이 유 는 터미널 이 키 보드 를 두 드 리 거나 닫 을 때 신 호 를 보 냈 기 때 문 입 니 다.한편,fork 에서 나 온 하위 프로 세 스 는 아버지 프로 세 스 가 자살 한 후에 고아 프로 세 스 가 되 어 운영 체제 의 init 프로 세 스 에 의 해 연결 되 어 단말기 제어 에서 벗 어 났 다.
    그래서 두 번 째 포크 는 꼭 필요 한 것 이 아 닙 니 다.프로 세 스 가 제어 단말 기 를 다시 열지 않도록 신중하게 고려 했 을 뿐이다.하위 프로 세 스 는 현재 세 션 팀장(대화 기의 첫 프로 세 스)이기 때문에 제어 단말 기 를 열 수 있 습 니 다.다시 fork 하면 손자 프로 세 스 는 제어 단말 기 를 열 수 없습니다.
    파일 설명자
    리 눅 스 는"모든 파일"입 니 다.파일 설명 자 는 커 널 이 열 린 파일 을 위 한 색인 입 니 다.보통 마이너스 정수 입 니 다.프로 세 스 는 파일 설명 자 를 통 해 IO 작업 을 수행 합 니 다.
    기본 적 인 상황 에서 0 은 표준 입력 을 대표 하고 1 은 표준 출력 을 대표 하 며 2 는 표준 오 류 를 대표 합 니 다.
    umask 권한 마스크
    리 눅 스에 서 는 모든 파일 에 읽 기(read),쓰기(write),실행(execute)의 세 가지 사용 권한 이 있다 는 것 을 알 고 있 습 니 다.그 중에서 읽 기 권한 은 숫자 4 로 대표 되 고 쓰기 권한 은 2 이 며 실행 권한 은 1 이다.명령 ls-l 은 파일 권한 을 볼 수 있 고 r/w/x 는 각각 읽 기/쓰기/실행 권한 이 있 음 을 표시 합 니 다.
    모든 파일 에는 사용자(User),사용자 그룹(Group),다른 그룹(Others)세 가지 신분 권한 이 있 습 니 다.일반적으로 세 개의 숫자 로 파일 권한 을 표시 합 니 다.예 를 들 어 754:
         7,사용자 권한,즉 파일 소유자 권한
         5,Group 권한,소유자 가 있 는 사용자 그룹의 구성원 이 가 진 권한
         4.Others 권한,즉 다른 그룹 사용자 의 권한 입 니 다.
    umask 는 기본 권한 을 제어 하기 위해 새 파일 이나 폴 더 가 전권 을 가지 지 않도록 합 니 다.
    시스템 은 일반적으로 022(명령 umask 로 보기)로 기본 파일 을 만 들 수 있 는 권한 은 644 이 고 폴 더 는 755 입 니 다.파일 권한 과 umask 의 추가 결 과 는 666(웃음)이 고 폴 더 권한 과 umask 의 추가 결 과 는 777 이라는 규칙 을 알 수 있 을 것 이다.
    프로 세 스 그룹
    모든 프로 세 스 는 하나의 프로 세 스 그룹(PG,Process Group)에 속 하 며,프로 세 스 그룹 은 여러 프로 세 스 를 포함 할 수 있 습 니 다.
    프로 세 스 그룹 에는 프로 세 스 팀장(Leader)이 있 습 니 다.프로 세 스 팀장 의 ID(PID,Process ID)는 전체 프로 세 스 그룹의 ID(PGID,Process Groupd ID)입 니 다.
    세 션 그룹
    터미널 에 로그 인 할 때 세 션 을 만 듭 니 다.여러 프로 세 스 그룹 이 세 션 에 포 함 될 수 있 습 니 다.세 션 을 만 드 는 프로 세 스 는 세 션 팀장 입 니 다.
    세 션 팀장 의 프로 세 스 입 니 다.setsid()방법 으로 세 션 을 만 들 수 없습니다.따라서 위의 코드 에서 하위 프로 세 스 는 setsid()를 호출 할 수 있 으 며,부모 프로 세 스 는 세 션 팀장 이기 때문에 사용 할 수 없습니다.
    또한,sh(Bourne Shell)는 세 션 체 제 를 지원 하지 않 습 니 다.세 션 체 제 는 셸 이 작업 제어(Job Control)를 지원 해 야 하기 때 문 입 니 다.
    데 몬 과 배경 프로 세 스
    &기 호 를 통 해 명령 을 배경 에 놓 고 실행 할 수 있 습 니 다.데 몬 과 는 다 릅 니 다:
  • 데 몬 은 터미널 과 상 관 없 이 init 프로 세 스에 입 양 된 고아 프로 세 스 입 니 다.백 엔 드 프로 세 스 의 부모 프로 세 스 는 터미널 로 터미널 에서 인쇄 할 수 있 습 니 다
  • 데 몬 이 터미널 을 닫 을 때 도 단단 합 니 다.백 엔 드 프로 세 스 는 nohup
  • 을 추가 하지 않 는 한 사용자 가 종료 할 때 중단 합 니 다.
  • 데 몬 은 세 션,프로 세 스 그룹,작업 디 렉 터 리,파일 설명 자 를 바 꾸 었 습 니 다.배경 프로 세 스 는 부모 프로 세 스(셸)를 직접 계승 합 니 다.
  • 수호 프로 세 스 는 묵묵히 싸 우 는 유망 청년 이 고,백 스테이지 프로 세 스 는 아버지의 자산 을 묵묵히 물 려 받 는 재벌 2 세 라 는 얘 기다.
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.

    좋은 웹페이지 즐겨찾기