对于用PHP进行多进程并发编程,不可避免要遇到僵尸进程的问题。
$pid = pcntl_fork();
if($pid == -1) {
    die(‘fork error‘);
} else if ($pid) {
    //父进程阻塞着等待子进程的退出
    //pcntl_wait($status);
    //pcntl_waitpid($pid, $status);
    
    //非阻塞方式
    //pcntl_wait($status, WNOHANG);
    //pcntl_waitpid($pid, $status, WNOHANG);
} else {
    sleep(3);
    echo "child \r\n";
    exit;
}
<?php
declare(ticks = 1);
//信号处理函数
function sig_func() {
    echo "SIGCHLD \r\n";
    pcntl_wait($status);
    //pcntl_waitpid(-1, $status);
    //非阻塞
    //pcntl_wait($status, WNOHANG);
    //pcntl_waitpid(-1, $status, WNOHANG);
}
pcntl_signal(SIGCHLD, ‘sig_func‘);
$pid = pcntl_fork();
if($pid == -1) {
    die(‘fork error‘);
} else if ($pid) {
    sleep(10);
} else {
    sleep(3);
    echo "child \r\n";
    exit;
}
<?php
$pid = pcntl_fork();
if($pid == -1) {
    die(‘fork error‘);
} else if ($pid) {
    for(;;) {
        sleep(3);
    }
} else {
    echo "child \r\n";
    exit;
}
> ps -A -o stat,ppid,pid,cmd | grep -e ‘^[Zz]‘
<?php
declare(ticks = 1);
//信号处理函数
function sig_func() {
    echo "SIGCHLD \r\n";
    pcntl_waitpid(-1, $status, WNOHANG);
}
pcntl_signal(SIGCHLD, ‘sig_func‘);
$pid = pcntl_fork();
if($pid == -1) {
    die(‘fork error‘);
} else if ($pid) {
    for(;;) {
        sleep(3);
    }
} else {
    echo "child \r\n";
    exit;
}
<?php
declare(ticks = 1);
pcntl_signal(SIGCHLD, SIG_IGN);
$pid = pcntl_fork();
if($pid == -1) {
    die(‘fork error‘);
} else if ($pid) {
    for(;;) {
        sleep(3);
    }
} else {
    echo "child \r\n";
    exit;
}
<?php
$pid = pcntl_fork();
if($pid == -1) {
    die(‘fork error‘);
} else if ($pid) {
    //父进程等待子进程退出
    pcntl_wait($status);
    echo "parent \r\n";
} else {
    //子进程再fork一次,产生孙进程
    $cpid = pcntl_fork();    
    if($cpid == -1) {
        die(‘fork error‘);
    } else if ($cpid) {
        //这里是子进程,直接退出
        echo "child \r\n";
        exit;
    } else {
        //这里是孙进程,处理业务逻辑
        for($i = 0; $i < 10; ++$i) {
            echo "work... \r\n";
            sleep(3);
        }
    }
}
原文:http://www.cnblogs.com/jkko123/p/6351615.html