kernel/private/classes/ezpcontentpublishingqueueprocessor.php
public function childSignalHandler( $signo, $pid = null, $status = null )
    {
        // If no pid is provided, that means we're getting the signal from the system.  Let's figure out
        // which child process ended
        if( $pid === null )
        {
            $pid = pcntl_waitpid( -1, $status, WNOHANG );
        }

        //Make sure we get all of the exited children
        while( $pid > 0 )
        {
            if( $pid && isset( $this->currentJobs[$pid] ) )
            {
                $exitCode = pcntl_wexitstatus( $status );
                if ( $exitCode != 0 )
                {
                    $this->out->write( "Process #{$pid} of object version #".$this->currentJobs[$pid]->attribute( 'ezcontentobject_version_id' ) . " exited with status {$exitCode}" );
                    // this is required as the MySQL connection might be closed anytime by a fork
                    // this method is asynchronous, and might be triggered by any signal
                    // the only way is to use a dedicated DB connection, and close it afterwards
                    eZDB::setInstance( eZDB::instance( false, false, true ) );

                    $this->currentJobs[$pid]->reset();

                    eZDB::instance()->close();
                    eZDB::setInstance( null );
                }
                unset( $this->currentJobs[$pid] );
            }
            // A job has finished before the parent process could even note that it had been launched
            // Let's make note of it and handle it when the parent process is ready for it
            // echo "..... Adding $pid to the signal queue ..... \n";
            elseif( $pid )
            {
                $this->signalQueue[$pid] = $status;
            }
            $pid = pcntl_waitpid( -1, $status, WNOHANG );
        }
        return true;
    }
public function childSignalHandler( $signo, $pid = null, $status = null )
    {
        // If no pid is provided, that means we're getting the signal from the system.  Let's figure out
        // which child process ended
        if( $pid === null )
        {
            $pid = pcntl_waitpid( -1, $status, WNOHANG );
        }

        //Make sure we get all of the exited children
        while( $pid > 0 )
        {
            if( $pid && isset( $this->currentJobs[$pid] ) )
            {
                $exitCode = pcntl_wexitstatus( $status );
                if ( $exitCode != 0 )
                {
                    $this->out->write( "Process #{$pid} of object version #".$this->currentJobs[$pid]->attribute( 'ezcontentobject_version_id' ) . " exited with status {$exitCode}" );
                    // this is required as the MySQL connection might be closed anytime by a fork
                    // this method is asynchronous, and might be triggered by any signal
                    // the only way is to use a dedicated DB connection, and close it afterwards
                    eZDB::setInstance( eZDB::instance( false, false, true ) );

                    $this->currentJobs[$pid]->reset();

                    eZDB::instance()->close();
                    eZDB::setInstance( null );
                }
                unset( $this->currentJobs[$pid] );
            }
            // A job has finished before the parent process could even note that it had been launched
            // Let's make note of it and handle it when the parent process is ready for it
            // echo "..... Adding $pid to the signal queue ..... \n";
            elseif( $pid )
            {
                $this->signalQueue[$pid] = $status;
            }
            $pid = pcntl_waitpid( -1, $status, WNOHANG );
        }
        return true;
    }
public function childSignalHandler ( $ signo , $ pid = null , $ status = null ) { // If no pid is provided, that means we're getting the signal from the system.  Let's figure out // which child process ended if ( $ pid === null ) { $ pid = pcntl_waitpid ( - 1 , $ status , WNOHANG ) ; } //Make sure we get all of the exited children while ( $ pid > 0 ) { if ( $ pid && isset ( $ this -> currentJobs [ $ pid ] ) ) { $ exitCode = pcntl_wexitstatus ( $ status ) ; if ( $ exitCode != 0 ) { $ this -> out -> write ( "Process #{$pid} of object version #" . $ this -> currentJobs [ $ pid ] -> attribute ( 'ezcontentobject_version_id' ) . " exited with status {$exitCode}" ) ; // this is required as the MySQL connection might be closed anytime by a fork // this method is asynchronous, and might be triggered by any signal // the only way is to use a dedicated DB connection, and close it afterwards eZDB :: setInstance ( eZDB :: instance ( false , false , true ) ) ; $ this -> currentJobs [ $ pid ] -> reset ( ) ; eZDB :: instance ( ) -> close ( ) ; eZDB :: setInstance ( null ) ; } unset ( $ this -> currentJobs [ $ pid ] ) ; } // A job has finished before the parent process could even note that it had been launched // Let's make note of it and handle it when the parent process is ready for it // echo "..... Adding $pid to the signal queue ..... \n"; elseif ( $ pid ) { $ this -> signalQueue [ $ pid ] = $ status ; } $ pid = pcntl_waitpid ( - 1 , $ status , WNOHANG ) ; } return true ; }
Child process signal handler
Child process signal handler