data-id="1190000005056078" data-license="sa">
사용기능
<code>pcntl_fork();//创建子进程 posix_setsid();//设置当前进程为进程组长 posix_getpid();//获取进程id</code>
예
근로자 중위 일반 프로세스
<code>/** * Run as deamon mode. * * @throws Exception */ protected static function daemonize() { if (!self::$daemonize) { return; } /** * 重设文件权限掩码 * 子进程从父进程继承了文件权限 * 若子进程不涉及到文件创建,可取消 */ umask(0); $pid = pcntl_fork();//创建子进程 if (-1 === $pid) { throw new Exception('fork fail'); } elseif ($pid > 0) { exit(0); //父进程退出 } /** * 更改子进程为进程组长 * 使子进程摆脱父进程控制 */ if (-1 === posix_setsid()) { throw new Exception("setsid fail"); } // Fork again avoid SVR4 system regain the control of terminal. $pid = pcntl_fork(); if (-1 === $pid) { throw new Exception("fork fail"); } elseif (0 !== $pid) { exit(0); } }</code>
기타 설명
기본 개념
데몬 프로세스: Linux의 백그라운드 서비스 프로세스입니다. 이는 일반적으로 제어 터미널과 독립적이며 주기적으로 일부 작업을 수행하거나 발생하는 특정 이벤트를 처리하기 위해 기다리는 수명이 긴 프로세스입니다. 데몬은 시스템이 부팅될 때 시작되고 시스템이 종료될 때 종료되는 경우가 많습니다.
프로세스 그룹: 하나 이상의 프로세스 모음입니다. 프로세스 그룹은 프로세스 그룹 ID로 고유하게 식별됩니다. 프로세스 번호(PID) 외에 프로세스 그룹 ID도 프로세스의 필수 속성입니다. 각 프로세스 그룹에는 리더 프로세스가 있으며, 리더 프로세스의 프로세스 번호는 프로세스 그룹 ID와 같습니다. 그리고 프로세스 그룹 ID는 그룹 리더 프로세스 종료에 영향을 받지 않습니다.
세션 주기: 세션은 하나 이상의 프로세스 그룹의 모음입니다. 일반적으로 세션은 사용자가 로그인할 때 시작되고 사용자가 로그아웃할 때 종료됩니다. 이 기간 동안 사용자가 실행하는 모든 프로세스는 이 세션에 속합니다.
프로세스 생성
하위 프로세스를 포크하고 상위 프로세스가 종료됩니다
하위 프로세스를 그룹 리더 프로세스로 변경
현재 디렉터리를 루트 디렉터리(chdir())로 변경
파일 권한 마스크 재설정
파일 설명자 닫기
데몬 종료, SIGCHLD 신호 처리
신호 처리
//TODO
참고 자료
데몬 프로세스의 PHP 구현
위 내용은 프로세스의 측면을 포함하여 Workerman Notes-php 생성 데몬 프로세스를 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.