public function timeBoxed(callable $code)
    {
        $existingHandler = pcntl_signal_get_handler(SIGALRM);

        $signal = pcntl_signal(SIGALRM, function (): void {
            throw new DeadlineException(sprintf("Timebox hit deadline of %d seconds", $this->timeout));
        });
        if (!$signal) {
            throw new LockAcquireException("Could not install signal");
        }
        $oldAlarm = pcntl_alarm($this->timeout);
        if ($oldAlarm != 0) {
            throw new LockAcquireException("Existing alarm was not expected");
        }
        try {
            return $code();
        } finally {
            pcntl_alarm(0);
            pcntl_signal_dispatch();
            pcntl_signal(SIGALRM, $existingHandler);
        }
    }
public function timeBoxed(callable $code)
    {
        $existingHandler = pcntl_signal_get_handler(SIGALRM);

        $signal = pcntl_signal(SIGALRM, function (): void {
            throw new DeadlineException(sprintf("Timebox hit deadline of %d seconds", $this->timeout));
        });
        if (!$signal) {
            throw new LockAcquireException("Could not install signal");
        }
        $oldAlarm = pcntl_alarm($this->timeout);
        if ($oldAlarm != 0) {
            throw new LockAcquireException("Existing alarm was not expected");
        }
        try {
            return $code();
        } finally {
            pcntl_alarm(0);
            pcntl_signal_dispatch();
            pcntl_signal(SIGALRM, $existingHandler);
        }
    }
public function timeBoxed ( callable $ code ) { $ existingHandler = pcntl_signal_get_handler ( SIGALRM ) ; $ signal = pcntl_signal ( SIGALRM , function ( ) : void { throw new DeadlineException ( sprintf ( "Timebox hit deadline of %d seconds" , $ this -> timeout ) ) ; } ) ; if ( ! $ signal ) { throw new LockAcquireException ( "Could not install signal" ) ; } $ oldAlarm = pcntl_alarm ( $ this -> timeout ) ; if ( $ oldAlarm != 0 ) { throw new LockAcquireException ( "Existing alarm was not expected" ) ; } try { return $ code ( ) ; } finally { pcntl_alarm ( 0 ) ; pcntl_signal_dispatch ( ) ; pcntl_signal ( SIGALRM , $ existingHandler ) ; } }
Runs the code and would eventually time out.

This method has the side effect, that any signal handler
for SIGALRM will be reset to the default hanlder (SIG_DFL).
It also expects that there is no previously scheduled alarm.
If your application uses alarms ({@link pcntl_alarm()}) or
a signal handler for SIGALRM, don't use this method. It will
interfer with your application and lead to unexpected behaviour.

@param callable $code Executed code block
@return mixed Return value of the executed block

@throws DeadlineException Running the code hit the deadline
@throws LockAcquireException Installing the timeout failed
Runs the code and would eventually time out .