>  기사  >  백엔드 개발  >  pcntl_wait 함수가 상위 클래스 프로세스를 일시 중지하지 못했습니다.

pcntl_wait 함수가 상위 클래스 프로세스를 일시 중지하지 못했습니다.

WBOY
WBOY원래의
2016-09-21 14:13:141169검색

합계가 2일 때 상위 프로세스가 중단되지 않는 이유는 무엇입니까?

$sum = 0;

<code>    while(true){
        $sum++;
        $pid= pcntl_fork();

        switch($pid){

            case "-1":

                echo"couldn't fork";

                break;
            case "0":{

                var_dump(getmypid());
                var_dump(pcntl_wifexited($status), pcntl_wifstopped($status), pcntl_wifsignaled($status), pcntl_wexitstatus($status), pcntl_wtermsig($status));
                echo 'ppppppppp';
</code>
<code>                exit(0);
            }

            default: {
                if($sum == 2){

                   // $subPid = pcntl_waitpid(-1, $status, SI_ASYNCIO);
                   $subPid = pcntl_wait($status);
                    echo '挂起'."\n";
                }

                var_dump('主'.getmypid());
                var_dump($subPid);
                echo "I'm child" . getmypid() . "\n";
                echo 'ccp';
                //就会执行子进程
                sleep(30);
                echo "\n\n\n";
            }

              //  exit(0);

        }
        var_dump(getmypid());
        echo 'iiiiiii';
        if($sum == 2)
        break;

    }
    
    
    这个是答案 
                    string(8) "主26003"</code>

NULL
나는 child26003
ccpint(26004)
bool(true)
bool(false)
bool(false)
int(0)
int (0)
pppppppp

int(26003)
iiiiiii 정지
string(8) "main 26003"
int(26004)
I'm child26003
ccpint(26005)
bool( true )
부울(거짓)
부울(거짓)
int(0)
int(0)
pppppppp

int(26003)
iiiiii

답글 내용:

합계가 2일 때 상위 프로세스가 중단되지 않는 이유는 무엇입니까?

$sum = 0;

<code>    while(true){
        $sum++;
        $pid= pcntl_fork();

        switch($pid){

            case "-1":

                echo"couldn't fork";

                break;
            case "0":{

                var_dump(getmypid());
                var_dump(pcntl_wifexited($status), pcntl_wifstopped($status), pcntl_wifsignaled($status), pcntl_wexitstatus($status), pcntl_wtermsig($status));
                echo 'ppppppppp';
</code>
<code>                exit(0);
            }

            default: {
                if($sum == 2){

                   // $subPid = pcntl_waitpid(-1, $status, SI_ASYNCIO);
                   $subPid = pcntl_wait($status);
                    echo '挂起'."\n";
                }

                var_dump('主'.getmypid());
                var_dump($subPid);
                echo "I'm child" . getmypid() . "\n";
                echo 'ccp';
                //就会执行子进程
                sleep(30);
                echo "\n\n\n";
            }

              //  exit(0);

        }
        var_dump(getmypid());
        echo 'iiiiiii';
        if($sum == 2)
        break;

    }
    
    
    这个是答案 
                    string(8) "主26003"</code>

NULL
나는 child26003
ccpint(26004)
bool(true)
bool(false)
bool(false)
int(0)
int (0)
pppppppp

int(26003)
iiiiiii 정지
string(8) "main 26003"
int(26004)
I'm child26003
ccpint(26005)
bool( true )
부울(거짓)
부울(거짓)
int(0)
int(0)
pppppppp

int(26003)
iiiiii

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.