C Linux 데 몬 구현

1. 개념
데 몬 은 배경 에서 실행 되 고 계속 실행 되 는 특수 한 프로 세 스 입 니 다.그것 은 터미널 을 제어 하고 어떤 임 무 를 주기 적 으로 수행 하거나 어떤 일 을 처리 하 기 를 기다 리 는 데 독립 되 어 있다.
Linux 의 대부분의 서버 는 데 몬 으로 이 루어 집 니 다.
2. Linux 의 커 널 데 몬
#ps aux
Init: 시스템 데 몬, 그의 프로 세 스 ID 는 1 로 각 실행 단계 의 특정 서 비 스 를 시작 합 니 다.
Keventd: 커 널 에서 실행 계획 을 실행 하 는 함수 에 컨 텍스트 를 제공 합 니 다.
Kswapd: 페이지 에서 데 몬 을 꺼 냅 니 다.더러 운 페이지 를 디스크 에 저속 으로 써 서 필요 할 때 재 활용 할 수 있 도록 합 니 다.
portmap: 포트 맵 데 몬.
syslogd: 운영 자가 시스템 정 보 를 로그 에 기록 하 는 모든 프로그램 에서 사용 할 수 있 습 니 다.
inetd: 네트워크 로부터 각종 네트워크 요청 을 받 을 수 있 도록 시스템 네트워크 인 터 페 이 스 를 검색 합 니 다.
nfsd, lockd, rpciod: 네트워크 파일 시스템 지원 을 제공 합 니 다.
cron: 지정 한 날짜 와 시간 에 지정 한 명령 을 수행 합 니 다.
3. C 리 눅 스 데 몬 구현 절차
a. 하위 프로 세 스 를 만 들 고 부모 프로 세 스 를 종료 합 니 다.
b. 하위 프로 세 스 에서 새 세 션 만 들 기
c. 작업 디 렉 터 리 변경
d. 파일 재 설정 마스크 만 들 기
파일 설명자 닫 기
4. 사례
데 몬 을 10 초 마다 / tmp / log. txt 에 기록 합 니 다.
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include <signal.h>
#include <sys/param.h>
#include <sys/stat.h>

void init_daemon(void);

int main(void){
	FILE *fp;
	time_t t;

	init_daemon();

	while(1){
		sleep(10);
		if( (fp=fopen("log.txt", "a+")) >= 0){//  log  ,         
			t=time(0);
			fprintf(fp, "        ,   :%s", asctime(localtime(&t)));
			fclose(fp);
		}
	}
	return 1;
}

void init_daemon(void){
	pid_t pid;
	int i;
	pid = fork();
	if(pid > 0){ //     
		exit(0);
	}else if(pid < 0 ){
		perror("       
"); exit(1); }else if(pid == 0){ setsid();// chdir("/tmp");// tmp umask(0); // for(i=0; i<NOFILE;++i){// close(i); } return ; } }

pid_t setsid(void); 새 그룹 프로 세 스 번호 설정
프로 세 스 그룹 번호 GID 를 성공 적 으로 되 돌려 주 었 습 니 다. - 1 을 되 돌려 주지 못 했 습 니 다. 이 유 는 errno 에 있 습 니 다.

좋은 웹페이지 즐겨찾기