이 글에서는 주로 PHP 데몬화를 구현하는 방법과 원리 과정을 소개하고, C 환경과 PHP 환경에서 구현한 코드도 소개합니다.
데몬 프로세스란 무엇인가요?
데몬 프로세스는 일반적으로 터미널을 제어하지 않는 백그라운드 작업으로 생각됩니다. 여기에는 세 가지 특징이 있습니다. 백그라운드에서 실행되고, 시작된 프로세스와 분리되며, 터미널을 제어할 필요가 없습니다. 일반적으로 사용되는 구현 방법은 fork() ->setsid() -> 이 함수를 호출하면 현재 프로세스가 터미널을 떠나 데몬 프로세스가 될 수 있습니다. 자세한 내용은 man 데몬을 참조하세요. 현재 PHP에는 이러한 기능이 없습니다. PHP 프로그램의 데몬화를 구현하는 방법에는 두 가지가 있습니다:
1. nohup
nohup php myprog.php > log.txt 시스템 명령을 사용하세요. 프로그램은 백그라운드에서 실행되지만 실제로는 사용자가 터미널을 종료하면 프로세스가 종료됩니다.
2를 달성하려면 nohup을 사용해야 합니다. 감독자 도구 사용(이 솔루션 권장)
감독자 사용에 대한 자세한 튜토리얼
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
테스트 결과:
데몬 프로세스:
The 여기에 두 가지 더 중요한 PHP 함수는 pcntl_fork() 및 posix_setsid()
fork() 프로세스입니다. 즉, 실행 중인 프로세스의 복사본이 하위 프로세스로 간주되고 원본 프로세스로 간주됩니다. 부모 프로세스. fork()가 실행된 후에는 이를 시작한 프로세스 및 터미널 제어에서 분리될 수 있습니다. 이는 또한 상위 프로세스가 자유롭게 종료될 수 있음을 의미합니다. setid()는 먼저 새 프로세스를 새 세션의 "리더"로 만들고 마지막으로 프로세스가 더 이상 터미널을 제어하지 않도록 만듭니다. 이는 데몬 프로세스가 되는 데 있어 가장 중요한 단계이기도 합니다. 터미널이 닫힐 때 강제로 종료됩니다. 이는 중단할 수 없는 상주 프로세스에 대한 중요한 단계입니다. 마지막 fork()를 수행합니다. 이 단계는 필수는 아니지만 일반적으로 수행됩니다. 가장 큰 의미는 제어 터미널을 얻는 것을 방지하는 것입니다. (터미널 장치를 직접 열고 O_NOCTTY 플래그를 사용하지 않으면 제어 터미널을 얻습니다.)
기타 참고 사항:
chdir() 데몬 프로세스는 기본적으로 마운트 해제 시 상위 프로세스의 현재 작업 디렉터리를 상속합니다. 이는 많은 문제를 야기합니다. 일반적으로 "/"는 데몬 프로세스의 현재 작업 디렉터리로 사용되며, 이는 위의 문제를 피할 수 있습니다. umask() 데몬 프로세스는 상위 프로세스의 파일 권한 마스크를 상속합니다. 프로세스를 기본적으로 자식 프로세스로 파일밴드를 사용하는 것이 문제가 많았습니다. 따라서 파일 권한 마스크를 0으로 설정하면 데몬의 유연성이 크게 향상될 수 있습니다. fclose(STDIN), fclose(STDOUT), fclose(STDERR)는 표준 I/O 스트림을 닫습니다. 포크 기능을 사용하여 생성된 하위 프로세스는 상위 프로세스에서 열려 있는 일부 파일을 상속받습니다. 이러한 열린 파일은 데몬에서 읽거나 쓸 수 없지만 여전히 시스템 리소스를 소비하고 파일 시스템이 마운트 해제될 수 있습니다.
관련 권장 사항:
php의 데몬 프로세스 두 가지 방법Php 다중 프로세스 구현 프로그래밍 예제PHP는 다중 프로세스 및 다중 스레드를 구현합니다
위 내용은 PHP 데몬화를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!