PHP.mk документација

pcntl_waitpid

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.pcntl-waitpid.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.pcntl-waitpid.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
pcntl_waitpid

Референца за `function.pcntl-waitpid.php` со подобрена типографија и навигација.

function.pcntl-waitpid.php

pcntl_waitpid

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

pcntl_waitpidЧека на или го враќа статусот на форкнато дете

= NULL

pcntl_waitpid(
         int $process_id,
         int &$status,
         int $flags = 0,
         array &$resource_usage = []
): int

Го суспендира извршувањето на тековниот процес додека детето како што е специфицирано од process_id аргументот не заврши, или додека не се испорача сигнал чија акција е да го прекине тековниот процес или да повика функција за ракување со сигнали.

Ако дете како што е побарано од process_id веќе завршило во моментот на повикот (т.н. „зомби“ процес), функцијата се враќа веднаш. Сите системски ресурси што ги користело детето се ослободуваат. Ве молиме погледнете ја вашата системска man страница waitpid(2) за специфични детали за тоа како работи waitpid на вашиот систем.

Параметри

process_id

Вредноста на process_id може да биде една од следниве:

можни вредности за process_id
< -1 чека на кое било дете чиј ID на процес група е еднаков на апсолутната вредност на process_id.
-1 чека на кое било дете; ова е истото однесување што го прикажува функцијата pcntl_wait() чека на кое било дете чиј ID на процес група е еднаков на оној на повикувачкиот процес.
0 чека на детето чиј ID на процес е еднаков на вредноста на
> 0 е еквивалентно на функционалноста што ја обезбедува process_id.

Забелешка:

Наведување -1 како process_id (минус pcntl_wait() ќе ги зачува информациите за статусот во параметарот flags).

status

pcntl_waitpid() што може да се процени со помош на следните функции: status е вредноста на нула или повеќе од следните две глобални константи pcntl_wifexited(), pcntl_wifstopped(), pcntl_wifsignaled(), pcntl_wexitstatus(), pcntl_wtermsig() and pcntl_wstopsig().

flags

Вредноста на flags споени заедно: ORсе враќа веднаш ако ниту едно дете не завршило.

можни вредности за flags
WNOHANG се враќа за деца кои се запрени, и чиј статус не е пријавен.
WUNTRACED го враќа ID на процесот на детето кое завршило, -1 при грешка или нула ако

Вратени вредности

pcntl_waitpid() беше искористено и ниту едно дете не беше достапно WNOHANG was used and no child was available

Види Исто така

  • pcntl_fork() - Форкира тековно активен процес
  • pcntl_signal() - Инсталира обработувач на сигнали
  • pcntl_wifexited() - Проверува дали кодот за статус претставува нормален излез
  • pcntl_wifstopped() - Проверува дали детето процес е моментално запрено
  • pcntl_wifsignaled() - Проверува дали кодот за статус претставува прекин поради сигнал
  • pcntl_wexitstatus() - Враќа код за враќање на прекинат дете
  • pcntl_wtermsig() - Враќа сигнал што го предизвика прекинот на детето
  • pcntl_wstopsig() - Враќа сигнал што го предизвика запирањето на детето

Белешки од корисници 3 белешки

сагуто точка л7цц на ѓимејл точка ком
пред 17 години
please note, if you using configure option --enable-sigchild(Enable PHP's own SIGCHLD handler) when complie php(under linux 2.6.18-53.1.13.el5.centos.plus and php 5.2.5 as I know), pcntl_waitpid and pcntl_wait in php script would never return the child pid, because the build in handle get it first.
S. Kr@cK
пред 11 години
<?php
$childs = array();

// Fork some process.
for($i = 0; $i < 10; $i++) {
    $pid = pcntl_fork();
    if($pid == -1)
        die('Could not fork');

    if ($pid) {
        echo "parent \n";
        $childs[] = $pid;
    } else {
        // Sleep $i+1 (s). The child process can get this parameters($i).
        sleep($i+1);
        
        // The child process needed to end the loop.
        exit();
    }
}

while(count($childs) > 0) {
    foreach($childs as $key => $pid) {
        $res = pcntl_waitpid($pid, $status, WNOHANG);
        
        // If the process has already exited
        if($res == -1 || $res > 0)
            unset($childs[$key]);
    }
    
    sleep(1);
}
?>
renmengyang567 na gmail dot com
пред 6 години
<?php

declare(ticks = 1);
function zp_handler($signal) {
    $id = pcntl_waitpid(-1, $status, WNOHANG);
    if (pcntl_wifexited($status)) 
    {
        printf("Removed Chlid id: %d \n",$id);
        printf("Chlid status: %d \n",pcntl_wexitstatus($status));
    }
}

//pcntl_signal_dispatch();
pcntl_signal(SIGCHLD, "zp_handler");
//pcntl_signal_dispatch();
//

$pid = pcntl_fork();
if ($pid == 0)
{
    print "#1 Hi, I'm child process".PHP_EOL;
    sleep(3);
    return 10;
}
else 
{
    print "#1parent process id:".$pid.PHP_EOL;
    $pid = pcntl_fork();
    if ($pid == 0)
    {   print "#2 Hi, I'm child process".PHP_EOL;
        sleep(10);
        exit(20);
    } 
    else 
    {
        print "#2parent process id:".$pid.PHP_EOL;
        for ($i=0; $i <10 ; $i++) { 
            print "wait..".PHP_EOL;
            sleep(10);
        }
    }
}
?>
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.