데 몬 생 성 방법

데 몬
Liux 나 유 닉 스 운영 체제 에서 시스템 을 안내 할 때 많은 서 비 스 를 시작 합 니 다. 이런 서 비 스 는 데 몬 이 라 고 합 니 다.유연성 을 높이 기 위해 루트 는 시스템 이 열 리 는 모델 을 선택 할 수 있 습 니 다. 이런 모델 을 운영 단계 라 고 하고 모든 운영 단 계 는 일정한 방식 으로 시스템 을 설정 할 수 있 습 니 다.
데 몬 은 터미널 에서 벗 어 나 배경 에서 실행 되 는 프로 세 스 입 니 다.데 몬 이 터미널 에서 벗 어 나 는 것 은 프로 세 스 가 실행 과정 에서 정 보 를 터미널 에 표시 하고 프로 세 스 가 터미널 에서 발생 하 는 터미널 정보 에 의 해 중단 되 지 않도록 하기 위 한 것 입 니 다.
데 몬, 즉 일반적으로 말 하 는 데 몬 프로 세 스 는 Linux 의 백 엔 드 서비스 프로 세 스 입 니 다.이것 은 생존 기간 이 비교적 긴 프로 세 스 로 단말 기 를 제어 하고 주기 적 으로 특정한 임 무 를 수행 하거나 발생 하 는 사건 을 처리 하 기 를 기다 리 는 과정 이다.데 몬 은 시스템 이 불 러 올 때 시작 되 고 시스템 이 닫 힐 때 종 료 됩 니 다.Linux 시스템 에는 많은 데 몬 이 있 습 니 다. 대부분의 서 비 스 는 데 몬 을 통 해 이 루어 집 니 다. 또한 데 몬 은 많은 시스템 작업 을 수행 할 수 있 습 니 다. 예 를 들 어 작업 계획 프로 세 스 crond, 인쇄 프로 세 스 lqd 등 입 니 다.
리 눅 스에 서 모든 시스템 이 사용자 와 교류 하 는 인 터 페 이 스 를 단말기 라 고 부 르 기 때문에 이 터미널 에서 실행 되 기 시작 하 는 프로 세 스 는 이 단말기 에 의존 합 니 다. 이 단말 기 는 이 프로 세 스 의 제어 단말기 라 고 부 릅 니 다. 제어 단말기 가 닫 히 면 해당 프로 세 스 는 자동 으로 닫 힙 니 다.그러나 데 몬 은 이러한 제한 을 돌파 할 수 있 습 니 다. 실행 되 기 시작 해서 전체 시스템 이 닫 힐 때 까지 종 료 됩 니 다.사용자 나 터미널 이나 다른 변화 로 인해 프로 세 스 가 영향 을 받 지 않도록 하려 면 이 프로 세 스 를 데 몬 으로 만들어 야 합 니 다.
간단 한 데 몬 만 들 기:
1. 하위 프로 세 스 만 들 기, 부모 프로 세 스 종료
데 몬 을 만 드 는 첫 번 째 단계 입 니 다.데 몬 은 제어 터미널 에서 벗 어 나 기 때문에 첫 번 째 단 계 를 마 친 후 Shell 터미널 에서 프로그램 이 실 행 된 가상 을 만 듭 니 다.이후 의 모든 작업 은 하위 프로 세 스에 서 이 루어 졌 고 사용 자 는 셸 터미널 에서 다른 명령 을 실행 할 수 있어 서 형식적 으로 제어 터미널 과 의 이탈 을 실현 했다.
리 눅 스에 서 부모 프로 세 스 가 하위 프로 세 스 보다 먼저 종료 되면 하위 프로 세 스 가 고아 프로 세 스 가 됩 니 다. 시스템 에서 고아 프로 세 스 가 있 는 것 을 발견 할 때마다 1 번 프로 세 스 (init) 가 자동 으로 입양 합 니 다. 그러면 원래 의 하위 프로 세 스 는 init 프로 세 스 의 하위 프로 세 스 가 됩 니 다.
2. 하위 프로 세 스에 새 세 션 만 들 기
이 단 계 는 데 몬 을 만 드 는 데 가장 중요 한 단계 입 니 다. 실현 은 매우 간단 하지만 그 의 미 는 매우 큽 니 다.여기 서 사용 하 는 것 은 시스템 함수 setsid 입 니 다. setsid 를 구체 적 으로 소개 하기 전에 먼저 두 가지 개념 을 알 아야 합 니 다. 프로 세 스 그룹 과 세 션 기간 입 니 다.
프로 세 스 그룹: 하나 이상 의 프로 세 스 의 집합 입 니 다.프로 세 스 그룹 에 프로 세 스 그룹 ID 가 있 습 니 다.프로 세 스 번호 (PID) 를 제외 하고 프로 세 스 그룹 ID 도 프로 세 스 의 필수 속성 입 니 다.모든 프로 세 스 그룹 에는 팀장 프로 세 스 가 있 습 니 다. 팀장 프로 세 스 의 프로 세 스 번 호 는 프로 세 스 그룹 ID 와 같 습 니 다.또한 이 프로 세 스 그룹 ID 는 팀장 프로 세 스 종료 로 인해 영향 을 받 지 않 습 니 다.
세 션 주기: 세 션 기간 은 하나 이상 의 프로 세 스 그룹의 집합 입 니 다.보통 세 션 이 사용자 와 로그 인하 기 시작 하고 사용자 가 종료 하 는 동안 이 사용자 가 실행 하 는 모든 프로 세 스 는 이 세 션 기간 에 속 합 니 다.
다음은 setsid 에 관 한 내용 을 구체 적 으로 소개 할 수 있 습 니 다.
(1) setsid 함수 역할:
setsid 함 수 는 새 세 션 을 만 들 고 이 세 션 그룹의 팀장 을 맡 는 데 사 용 됩 니 다.setsid 를 호출 하면 다음 세 가지 역할 이 있 습 니 다:
프로 세 스 를 원래 세 션 의 제어 에서 벗 어 나 게 합 니 다.
프로 세 스 를 원래 프로 세 스 그룹의 제어 에서 벗 어 나 게 합 니 다.
프로 세 스 를 원 제어 단말기 의 제어 에서 벗 어 나 게 하 다.
그렇다면 데 몬 을 만 들 때 왜 setsid 함 수 를 호출 합 니까?데 몬 을 만 드 는 첫 번 째 단 계 는 fork 함 수 를 호출 하여 하위 프로 세 스 를 만 들 고 부모 프로 세 스 를 종료 합 니 다.fork 함 수 를 호출 했 을 때 하위 프로 세 스 는 부모 프로 세 스 의 세 션 기간, 프로 세 스 그룹, 제어 터미널 등 을 모두 복사 하 였 습 니 다. 부모 프로 세 스 가 종료 되 었 지만 세 션 기간, 프로 세 스 그룹, 제어 터미널 등 은 변 하지 않 았 기 때문에 진정한 의미 에서 독립 된 것 이 아 닙 니 다. setsid 함 수 는 프로 세 스 를 완전히 독립 시 켜 다른 프로 세 스 의 제어 에서 벗 어 날 수 있 습 니 다.
3. 현재 디 렉 터 리 를 루트 디 렉 터 리 로 변경
이 단계 도 필요 한 절차 다.fork 를 사용 하여 만 든 하위 프로 세 스 는 부모 프로 세 스 의 현재 작업 디 렉 터 리 를 계승 합 니 다.프로 세 스 가 실 행 될 때 현재 디 렉 터 리 가 있 는 파일 시스템 (예 를 들 어 '/mnt/usb') 은 마 운 트 해제 할 수 없 기 때문에 앞으로 의 사용 에 많은 번 거 로 움 을 초래 할 수 있 습 니 다 (예 를 들 어 시스템 이 어떤 이유 로 들 어가 야 하지만 사용자 모드).따라서 일반적인 방법 은 '/' 를 shohujincheng 의 현재 작업 디 렉 터 리 로 하 는 것 입 니 다. 그러면 상기 문 제 를 피 할 수 있 습 니 다. 물론 특수 한 수요 가 있 으 면 현재 작업 디 렉 터 리 를 다른 경로 로 바 꿀 수도 있 습 니 다. 예 를 들 어/tmp.작업 디 렉 터 리 를 바 꾸 는 일반적인 함수 식 chdir.
4. 파일 권한 마스크 재 설정
파일 권한 마스크 는 파일 권한 의 대응 위 치 를 차단 하 는 것 을 말한다.예 를 들 어 파일 권한 마스크 가 050 이면 파일 그룹 소유자 의 읽 기와 실행 가능 한 권한 을 차단 합 니 다.fork 함 수 를 사용 하여 새 하위 프로 세 스 가 부모 프로 세 스 의 파일 권한 마스크 를 계승 하기 때문에 이 하위 프로 세 스 가 파일 을 사용 하 는 데 많은 번 거 로 움 을 가 져 왔 습 니 다.따라서 파일 권한 마스크 를 0 으로 설정 하면 데 몬 의 유연성 을 크게 강화 할 수 있 습 니 다.파일 권한 마스크 를 설정 하 는 함 수 는 umask 입 니 다.여기 서 일반적인 사용 방법 은 umask (0) 입 니 다.
5. 파일 설명자 닫 기
파일 권한 코드 와 마찬가지 로 fork 함수 로 새로 만 든 하위 프로 세 스 는 부모 프로 세 스에 서 열 린 파일 을 계승 합 니 다.이 열 린 파일 들 은 데 몬 에 의 해 읽 히 지 않 을 수도 있 지만, 시스템 자원 을 소모 할 수도 있 고, 있 는 파일 시스템 을 해제 할 수 없 을 수도 있 습 니 다.
위의 두 번 째 단계 이후 데 몬 은 소속 제어 단말기 와 연락 이 끊 겼 습 니 다.따라서 터미널 에서 입력 한 문 자 는 데 몬 에 도달 할 수 없습니다. 데 몬 에서 일반적인 방법 (예 를 들 어 printf) 으로 출력 한 문자 도 터미널 에 표시 할 수 없습니다.따라서 파일 설명자 가 0, 1, 2 인 3 개의 파일 (흔히 말 하 는 입력, 출력, 오류) 은 존재 하 는 가 치 를 잃 었 고 닫 혀 야 합 니 다.보통 다음 과 같은 방식 으로 파일 설명 자 를 닫 습 니 다.
4. 567913. 이렇게 해서 간단 한 데 몬 이 만 들 어 졌 습 니 다.
데 몬 의 전체 인 스 턴 스 구현 (10s 마다/tmp/dameon. log 에 한 마디 씩 기록):
for(i=0;i<MAXFILE;i++)
  close(i);

좋은 웹페이지 즐겨찾기