PHP 데 몬 이 C 와 PHP 환경 에서 실 현 됩 니 다.

3185 단어 PHP 데 몬
본 고 는 PHP 데 몬 이 C 환경 과 PHP 환경 에서 이 루어 지 는 방법 과 인 스 턴 스 코드 를 소개 하 며 함께 배 워 보 겠 습 니 다.
데 몬 이 무엇 입 니까?
데 몬 은 보통 터미널 을 제어 하지 않 는 배경 작업 으로 보 입 니 다.그것 은 세 가지 뚜렷 한 특징 이 있다.배경 에서 실행 되 고 그의 프로 세 스 를 시작 하 는 것 과 분리 되 며 단말 기 를 제어 할 필요 가 없다.일반적인 구현 방식 은 fork()->setsid()->fork()입 니 다.
glibc 에 함수 daemon 이 있 습 니 다.이 함 수 를 호출 하면 현재 프로 세 스 를 터미널 에서 벗 어 나 데 몬 으로 만 들 수 있 습 니 다.구체 적 인 내용 은 man daemon 을 참조 하 십시오.PHP 에 서 는 이 함수 가 잠시 없습니다.PHP 프로그램 이 데 몬 화 를 실현 하 는 방법 은 두 가지 가 있 습 니 다.
1.시스템 명령 nohup 사용
nohup phop my prog.phop>log.txt 이렇게 실행 하 는 프로그램 도 배경 으로 실행 되 지만 실제로는 터미널 에 의존 합 니 다.사용자 가 터미널 을 종료 할 때 프로 세 스 가 종 료 됩 니 다.nohup 을 사용 해 야 합 니 다.
2.슈퍼 바 이 저 도구 사용(이 프로젝트 추천)
슈퍼 바 이 저 사용 튜 토리 얼 상세 설명
3.물론 프로그램 으로 도 실현 할 수 있다(생산 환경 사용 을 권장 하지 않 음)C 프로그램 으로 도 실현 할 수 있다.

#include 
#include 
#include 
#include 
#include 
#include 

//        
void crete_daemon(void)
{
pid_t pid = 0;
pid = fork();
if (pid<0)
{
perror("fork");
exit(-1);
}
if (pid > 0)
{
//1.       
exit(0);
}
//2.
//          
//setsid                session,    
//          ,      。
pid = setsid();
if (pid < 0)
{
perror("setsid");
exit(-1);
}
//3.               ,      
chdir("/");
//4.umask   0                
umask(0);
//5.       
//                        
int i = 0;
int cnt = sysconf(_SC_OPEN_MAX);
for (i=0;i
테스트 결과:

데 몬:

여기 서 가장 중요 한 두 개의 phop 함 수 는 pcntl 입 니 다.fork()와 posixsetsid()
fork()프로 세 스 는 실행 프로 세 스 의 복사 본 을 만 들 었 음 을 표시 합 니 다.복사 본 은 하위 프로 세 스 로 여 겨 지고 원본 프로 세 스 는 부모 프로 세 스 로 여 겨 집 니 다.포크()가 실행 되면 시작 프로 세 스 와 터미널 제어 에서 벗 어 날 수 있 고 부모 프로 세 스 가 자 유 롭 게 종료 할 수 있 음 을 의미 합 니 다.setsid()는 먼저 새 프로 세 스 를 새로운 세 션 의'리더'로 만 들 고 마지막 으로 이 프로 세 스 가 터미널 을 제어 하지 않 게 하 는 것 도 데 몬 의 가장 관건 적 인 단계 입 니 다.이것 은 터미널 이 닫 히 면서 프로 세 스 를 강제로 종료 하지 않 는 다 는 것 을 의미 합 니 다.중단 되 지 않 는 상주 프로 세 스에 있어 서 중요 한 단계 다.마지막 포크()를 진행 합 니 다.이 단 계 는 필요 한 것 이 아니 지만 보통 이렇게 합 니 다.가장 큰 의 미 는 제어 단말 기 를 얻 는 것 을 방지 하 는 것 입 니 다.(터미널 장 치 를 직접 열 고 O 를 사용 하지 않 았 습 니 다.NOCTTY 로고 의 경우 제어 단말 기 를 획득 합 니 다)
기타 사항 설명:
chdir()데 몬 은 기본적으로 부모 프로 세 스 의 현재 작업 디 렉 터 리 를 계승 합 니 다.시스템 디스크 에 umount 가 발생 할 때 많은 번 거 로 움 을 초래 합 니 다.보통'/'를 데 몬 의 현재 작업 디 렉 터 리 로 사용 합 니 다.상기 문제 인 umask()데 몬 은 기본적으로 부모 프로 세 스 의 파일 권한 마스크 를 계승 합 니 다.이 는 하위 프로 세 스 가 파일 을 사용 하 는 데 많은 번 거 로 움 을 가 져 옵 니 다.따라서 파일 권한 마스크 를 0 으로 설정 하면 이 데 몬 의 유연성 fclose(STDIN),fclose(STDOUT),fclose(STDERR)가 표준 I/O 흐름 을 닫 을 수 있 습 니 다.fork 함수 로 새로 만 든 하위 프로 세 스 는 부모 프로 세 스에 서 열 린 파일 을 계승 합 니 다.이 열 린 파일 들 은 데 몬 에 의 해 읽 히 지 않 을 수도 있 지만,시스템 자원 을 소모 할 수도 있 고,있 는 파일 시스템 을 해제 할 수 없 을 수도 있 습 니 다.

좋은 웹페이지 즐겨찾기