企邮搬家进程管理逻辑,经过简化后的功能实现
- <?PHP
- //守护进程
- umask(0); //把文件掩码清0
- if (pcntl_fork() != 0){ //是父进程,父进程退出
- exit();
- }
- posix_setsid();//设置新会话组长,脱离终端
- if (pcntl_fork() != 0){ //是第一子进程,结束第一子进程
- exit();
- }
- chdir("/"); //改变工作目录
- //开启五个子进程
- $worker=0;
- do {
- for($i=0;$i<6;$i++){
- $pid = pcntl_fork();
- if ($pid == -1) {
- return false;
- } elseif ($pid == 0) { //子进程,在此处处理业务逻辑
- //TODO
- sleep(60);
- exit;
- } else { // parent
- $worker++;
- if($worker>5){
- $id = pcntl_wait($status);
- if ($id > 0) {
- $worker--;
- }
- }
- }
- }
- usleep(200000);
- } while (true);
- while ($worker > 0) {
- $id = pcntl_wait($status);
- if ($id > 0) {
- $worker--;
- }
- }