| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | <?php/* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */namespace Symfony\Component\Console\SignalRegistry;final class SignalRegistry{    private $signalHandlers = [];    public function __construct()    {        if (\function_exists('pcntl_async_signals')) {            pcntl_async_signals(true);        }    }    public function register(int $signal, callable $signalHandler): void    {        if (!isset($this->signalHandlers[$signal])) {            $previousCallback = pcntl_signal_get_handler($signal);            if (\is_callable($previousCallback)) {                $this->signalHandlers[$signal][] = $previousCallback;            }        }        $this->signalHandlers[$signal][] = $signalHandler;        pcntl_signal($signal, [$this, 'handle']);    }    public static function isSupported(): bool    {        if (!\function_exists('pcntl_signal')) {            return false;        }        if (\in_array('pcntl_signal', explode(',', \ini_get('disable_functions')))) {            return false;        }        return true;    }    /**     * @internal     */    public function handle(int $signal): void    {        $count = \count($this->signalHandlers[$signal]);        foreach ($this->signalHandlers[$signal] as $i => $signalHandler) {            $hasNext = $i !== $count - 1;            $signalHandler($signal, $hasNext);        }    }}
 |