C Linux 데 몬 구현
데 몬 은 배경 에서 실행 되 고 계속 실행 되 는 특수 한 프로 세 스 입 니 다.그것 은 터미널 을 제어 하고 어떤 임 무 를 주기 적 으로 수행 하거나 어떤 일 을 처리 하 기 를 기다 리 는 데 독립 되 어 있다.
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 에 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.