Nasıl (pcntl_waitpid tarafından döndürülen $ durumunu kullanabilirim?)

0 Cevap php

Ben bir ebeveyn / işçi düzenlemesi devam var. Ebeveyn sürekli onlar aşağıdaki döngü ile hala hayatta olduğunu kontrol, bir dizi işçi PID'leri tutar:

// $workers is an array of PIDs
foreach ($workers as $workerID => $pid) {
    // Check if this worker still exists as a process
    pcntl_waitpid($pid, $status, WNOHANG|WUNTRACED);

    // If the worker exited normally, stop tracking it
    if (pcntl_wifexited($status)) {
        $logger->info("Worker $workerID exited normally");
        array_splice($workers, $workerID, 1); 
    }

    // If it has a session ID, then it's still living
    if (posix_getsid($pid))⋅
        $living[] = $pid;
}

// $dead is the difference between workers we've started
// and those that are still running
$dead = array_diff($workers, $living);

Sorun pcntl_waitpid() Her zaman 0 $status belirliyor, böylece bu döngü çalıştırmak çok ilk kez anne-baba olsa bile, tüm çocukların normal çıktıktan olduğunu düşünüyor olması hala çalışıyor. I pcntl_waitpid() yanlış kullanarak, ya da öyle değil bir şey yapmak için bekliyorum?

0 Cevap