Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. SignalHandler.php

class SignalHandler

SignalHandler and factory

Hierarchy

  • class \Seld\Signal\SignalHandler

Expanded class hierarchy of SignalHandler

4 files declare their use of SignalHandler
CreateProjectCommand.php in vendor/composer/composer/src/Composer/Command/CreateProjectCommand.php
InstallationManager.php in vendor/composer/composer/src/Composer/Installer/InstallationManager.php
ProcessExecutor.php in vendor/composer/composer/src/Composer/Util/ProcessExecutor.php
RequireCommand.php in vendor/composer/composer/src/Composer/Command/RequireCommand.php

File

vendor/seld/signal-handler/src/SignalHandler.php, line 21

Namespace

Seld\Signal
View source
final class SignalHandler {
    
    /**
     * The SIGHUP signal is sent to a process when its controlling terminal is closed. It was originally designed to
     * notify the process of a serial line drop (a hangup). In modern systems, this signal usually means that the
     * controlling pseudo or virtual terminal has been closed. Many daemons will reload their configuration files and
     * reopen their logfiles instead of exiting when receiving this signal. nohup is a command to make a command ignore
     * the signal.
     */
    public const SIGHUP = 'SIGHUP';
    
    /**
     * The SIGINT signal is sent to a process by its controlling terminal when a user wishes to interrupt the process.
     * This is typically initiated by pressing Ctrl-C, but on some systems, the "delete" character or "break" key can be
     * used.
     *
     * On Windows this is used to denote a PHP_WINDOWS_EVENT_CTRL_C
     */
    public const SIGINT = 'SIGINT';
    
    /**
     * The SIGQUIT signal is sent to a process by its controlling terminal when the user requests that the process quit
     * and perform a core dump.
     */
    public const SIGQUIT = 'SIGQUIT';
    
    /**
     * The SIGILL signal is sent to a process when it attempts to execute an illegal, malformed, unknown, or privileged
     * instruction.
     */
    public const SIGILL = 'SIGILL';
    
    /**
     * The SIGTRAP signal is sent to a process when an exception (or trap) occurs: a condition that a debugger has
     * requested to be informed of — for example, when a particular function is executed, or when a particular variable
     * changes value.
     */
    public const SIGTRAP = 'SIGTRAP';
    
    /**
     * The SIGABRT signal is sent to a process to tell it to abort, i.e. to terminate. The signal is usually initiated
     * by the process itself when it calls abort function of the C Standard Library, but it can be sent to the process
     * from outside like any other signal.
     */
    public const SIGABRT = 'SIGABRT';
    public const SIGIOT = 'SIGIOT';
    
    /**
     * The SIGBUS signal is sent to a process when it causes a bus error. The conditions that lead to the signal being
     * sent are, for example, incorrect memory access alignment or non-existent physical address.
     */
    public const SIGBUS = 'SIGBUS';
    public const SIGFPE = 'SIGFPE';
    
    /**
     * The SIGKILL signal is sent to a process to cause it to terminate immediately (kill). In contrast to SIGTERM and
     * SIGINT, this signal cannot be caught or ignored, and the receiving process cannot perform any clean-up upon
     * receiving this signal.
     */
    public const SIGKILL = 'SIGKILL';
    
    /**
     * The SIGUSR1 signal is sent to a process to indicate user-defined conditions.
     */
    public const SIGUSR1 = 'SIGUSR1';
    
    /**
     * The SIGUSR1 signa2 is sent to a process to indicate user-defined conditions.
     */
    public const SIGUSR2 = 'SIGUSR2';
    
    /**
     * The SIGSEGV signal is sent to a process when it makes an invalid virtual memory reference, or segmentation fault,
     * i.e. when it performs a segmentation violation.
     */
    public const SIGSEGV = 'SIGSEGV';
    
    /**
     * The SIGPIPE signal is sent to a process when it attempts to write to a pipe without a process connected to the
     * other end.
     */
    public const SIGPIPE = 'SIGPIPE';
    
    /**
     * The SIGALRM, SIGVTALRM and SIGPROF signal is sent to a process when the time limit specified in a call to a
     * preceding alarm setting function (such as setitimer) elapses. SIGALRM is sent when real or clock time elapses.
     * SIGVTALRM is sent when CPU time used by the process elapses. SIGPROF is sent when CPU time used by the process
     * and by the system on behalf of the process elapses.
     */
    public const SIGALRM = 'SIGALRM';
    
    /**
     * The SIGTERM signal is sent to a process to request its termination. Unlike the SIGKILL signal, it can be caught
     * and interpreted or ignored by the process. This allows the process to perform nice termination releasing
     * resources and saving state if appropriate. SIGINT is nearly identical to SIGTERM.
     */
    public const SIGTERM = 'SIGTERM';
    public const SIGSTKFLT = 'SIGSTKFLT';
    public const SIGCLD = 'SIGCLD';
    
    /**
     * The SIGCHLD signal is sent to a process when a child process terminates, is interrupted, or resumes after being
     * interrupted. One common usage of the signal is to instruct the operating system to clean up the resources used by
     * a child process after its termination without an explicit call to the wait system call.
     */
    public const SIGCHLD = 'SIGCHLD';
    
    /**
     * The SIGCONT signal instructs the operating system to continue (restart) a process previously paused by the
     * SIGSTOP or SIGTSTP signal. One important use of this signal is in job control in the Unix shell.
     */
    public const SIGCONT = 'SIGCONT';
    
    /**
     * The SIGSTOP signal instructs the operating system to stop a process for later resumption.
     */
    public const SIGSTOP = 'SIGSTOP';
    
    /**
     * The SIGTSTP signal is sent to a process by its controlling terminal to request it to stop (terminal stop). It is
     * commonly initiated by the user pressing Ctrl+Z. Unlike SIGSTOP, the process can register a signal handler for or
     * ignore the signal.
     */
    public const SIGTSTP = 'SIGTSTP';
    
    /**
     * The SIGTTIN signal is sent to a process when it attempts to read in from the tty while in the background.
     * Typically, this signal is received only by processes under job control; daemons do not have controlling
     */
    public const SIGTTIN = 'SIGTTIN';
    
    /**
     * The SIGTTOU signal is sent to a process when it attempts to write out from the tty while in the background.
     * Typically, this signal is received only by processes under job control; daemons do not have controlling
     */
    public const SIGTTOU = 'SIGTTOU';
    
    /**
     * The SIGURG signal is sent to a process when a socket has urgent or out-of-band data available to read.
     */
    public const SIGURG = 'SIGURG';
    
    /**
     * The SIGXCPU signal is sent to a process when it has used up the CPU for a duration that exceeds a certain
     * predetermined user-settable value. The arrival of a SIGXCPU signal provides the receiving process a chance to
     * quickly save any intermediate results and to exit gracefully, before it is terminated by the operating system
     * using the SIGKILL signal.
     */
    public const SIGXCPU = 'SIGXCPU';
    
    /**
     * The SIGXFSZ signal is sent to a process when it grows a file larger than the maximum allowed size
     */
    public const SIGXFSZ = 'SIGXFSZ';
    
    /**
     * The SIGVTALRM signal is sent to a process when the time limit specified in a call to a preceding alarm setting
     * function (such as setitimer) elapses. SIGVTALRM is sent when CPU time used by the process elapses.
     */
    public const SIGVTALRM = 'SIGVTALRM';
    
    /**
     * The SIGPROF signal is sent to a process when the time limit specified in a call to a preceding alarm setting
     * function (such as setitimer) elapses. SIGPROF is sent when CPU time used by the process and by the system on
     * behalf of the process elapses.
     */
    public const SIGPROF = 'SIGPROF';
    
    /**
     * The SIGWINCH signal is sent to a process when its controlling terminal changes its size (a window change).
     */
    public const SIGWINCH = 'SIGWINCH';
    
    /**
     * The SIGPOLL signal is sent when an event occurred on an explicitly watched file descriptor.Using it effectively
     * leads to making asynchronous I/O requests since the kernel will poll the descriptor in place of the caller. It
     * provides an alternative to active polling.
     */
    public const SIGPOLL = 'SIGPOLL';
    public const SIGIO = 'SIGIO';
    
    /**
     * The SIGPWR signal is sent to a process when the system experiences a power failure.
     */
    public const SIGPWR = 'SIGPWR';
    
    /**
     * The SIGSYS signal is sent to a process when it passes a bad argument to a system call. In practice, this kind of
     * signal is rarely encountered since applications rely on libraries (e.g. libc) to make the call for them.
     */
    public const SIGSYS = 'SIGSYS';
    public const SIGBABY = 'SIGBABY';
    
    /**
     * CTRL+Break support, available on Windows only for PHP_WINDOWS_EVENT_CTRL_BREAK
     */
    public const SIGBREAK = 'SIGBREAK';
    private const ALL_SIGNALS = [
        self::SIGHUP,
        self::SIGINT,
        self::SIGQUIT,
        self::SIGILL,
        self::SIGTRAP,
        self::SIGABRT,
        self::SIGIOT,
        self::SIGBUS,
        self::SIGFPE,
        self::SIGKILL,
        self::SIGUSR1,
        self::SIGUSR2,
        self::SIGSEGV,
        self::SIGPIPE,
        self::SIGALRM,
        self::SIGTERM,
        self::SIGSTKFLT,
        self::SIGCLD,
        self::SIGCHLD,
        self::SIGCONT,
        self::SIGSTOP,
        self::SIGTSTP,
        self::SIGTTIN,
        self::SIGTTOU,
        self::SIGURG,
        self::SIGXCPU,
        self::SIGXFSZ,
        self::SIGVTALRM,
        self::SIGPROF,
        self::SIGWINCH,
        self::SIGPOLL,
        self::SIGIO,
        self::SIGPWR,
        self::SIGSYS,
        self::SIGBABY,
        self::SIGBREAK,
    ];
    
    /**
     * @var self::SIG*|null
     */
    private $triggered = null;
    
    /**
     * @var list<self::SIG*>
     * @readonly
     */
    private $signals;
    
    /**
     * @var LoggerInterface|(callable(self::SIG* $name, SignalHandler $self): void)|null
     * @readonly
     */
    private $loggerOrCallback;
    
    /**
     * @var array<int, self|WeakReference<self>>
     */
    private static $handlers = [];
    
    /** @var Closure|null */
    private static $windowsHandler = null;
    
    /**
     * @param array<self::SIG*> $signals
     * @param LoggerInterface|(callable(self::SIG* $name, SignalHandler $self): void)|null $loggerOrCallback
     */
    private function __construct(array $signals, $loggerOrCallback) {
        if (!is_callable($loggerOrCallback) && !$loggerOrCallback instanceof LoggerInterface && $loggerOrCallback !== null) {
            throw new \InvalidArgumentException('$loggerOrCallback must be a ' . LoggerInterface::class . ' instance, a callable, or null, ' . (is_object($loggerOrCallback) ? get_class($loggerOrCallback) : gettype($loggerOrCallback)) . ' received.');
        }
        $this->signals = $signals;
        $this->loggerOrCallback = $loggerOrCallback;
    }
    
    /**
     * @param self::SIG* $signalName
     */
    private function trigger(string $signalName) : void {
        $this->triggered = $signalName;
        if ($this->loggerOrCallback instanceof LoggerInterface) {
            $this->loggerOrCallback
                ->info('Received ' . $signalName);
        }
        elseif ($this->loggerOrCallback !== null) {
            ($this->loggerOrCallback)($signalName, $this);
        }
    }
    
    /**
     * Fetches the triggered state of the handler
     *
     * @phpstan-impure
     */
    public function isTriggered() : bool {
        return $this->triggered !== null;
    }
    
    /**
     * Exits the process while communicating that the handled signal was what killed the process
     *
     * This is different from doing exit(SIGINT), and is also different to a successful exit(0).
     *
     * This should only be used when you received a signal and then handled it to gracefully shutdown and are now ready to shutdown.
     *
     * ```
     * $signal = SignalHandler::create([SignalHandler::SIGINT], function (string $signal, SignalHandler $handler) {
     *     // do cleanup here..
     *
     *     $handler->exitWithLastSignal();
     * });
     *
     * // or...
     *
     * $signal = SignalHandler::create([SignalHandler::SIGINT]);
     *
     * while ($doingThings) {
     *     if ($signal->isTriggered()) {
     *         $signal->exitWithLastSignal();
     *     }
     *
     *     // do more things
     * }
     * ```
     *
     * @see https://www.cons.org/cracauer/sigint.html
     * @return never
     */
    public function exitWithLastSignal() : void {
        $signal = $this->triggered ?? 'SIGINT';
        $signal = defined($signal) ? constant($signal) : 2;
        if (function_exists('posix_kill') && function_exists('posix_getpid')) {
            pcntl_signal($signal, SIG_DFL);
            posix_kill(posix_getpid(), $signal);
        }
        // just in case posix_kill above could not run
        // not strictly correct but it's the best we can do here
        exit(128 + $signal);
    }
    
    /**
     * Resets the state to let a handler accept a signal again
     */
    public function reset() : void {
        $this->triggered = null;
    }
    public function __destruct() {
        $this->unregister();
    }
    
    /**
     * @param (string|int)[] $signals array of signal names (more portable, see SignalHandler::SIG*) or constants - defaults to [SIGINT, SIGTERM]
     * @param LoggerInterface|callable $loggerOrCallback A PSR-3 Logger or a callback($signal, $signalName)
     * @return self A handler on which you can call isTriggered to know if the signal was received, and reset() to forget
     *
     * @phpstan-param list<self::SIG*|int> $signals
     * @phpstan-param LoggerInterface|(callable(self::SIG* $name, SignalHandler $self): void) $loggerOrCallback
     */
    public static function create(?array $signals = null, $loggerOrCallback = null) : self {
        if ($signals === null) {
            $signals = [
                self::SIGINT,
                self::SIGTERM,
            ];
        }
        $signals = array_map(function ($signal) {
            if (is_int($signal)) {
                return self::getSignalName($signal);
            }
            elseif (!in_array($signal, self::ALL_SIGNALS, true)) {
                throw new \InvalidArgumentException('$signals must be an array of SIG* constants or self::SIG* constants, got ' . var_export($signal, true));
            }
            return $signal;
        }, (array) $signals);
        $handler = new self($signals, $loggerOrCallback);
        if (PHP_VERSION_ID >= 80000) {
            array_unshift(self::$handlers, WeakReference::create($handler));
        }
        else {
            array_unshift(self::$handlers, $handler);
        }
        if (function_exists('sapi_windows_set_ctrl_handler') && PHP_SAPI === 'cli' && (in_array(self::SIGINT, $signals, true) || in_array(self::SIGBREAK, $signals, true))) {
            if (null === self::$windowsHandler) {
                self::$windowsHandler = Closure::fromCallable([
                    self::class,
                    'handleWindowsSignal',
                ]);
                sapi_windows_set_ctrl_handler(self::$windowsHandler);
            }
        }
        if (function_exists('pcntl_signal') && function_exists('pcntl_async_signals')) {
            pcntl_async_signals(true);
            self::registerPcntlHandler($signals);
        }
        return $handler;
    }
    
    /**
     * Clears the signal handler
     *
     * On PHP 8+ this is not necessary and it will happen automatically on __destruct, but PHP 7 does not
     * support weak references and thus there you need to manually do this.
     *
     * If another handler was registered previously to this one, it becomes active again
     */
    public function unregister() : void {
        $signals = $this->signals;
        $index = false;
        foreach (self::$handlers as $key => $handler) {
            if ($handler instanceof WeakReference && $handler->get() === $this || $handler === $this) {
                $index = $key;
                break;
            }
        }
        if ($index === false) {
            // guard against double-unregistration when __destruct happens
            return;
        }
        unset(self::$handlers[$index]);
        if (self::$windowsHandler !== null && (in_array(self::SIGINT, $signals, true) || in_array(self::SIGBREAK, $signals, true))) {
            if (self::getHandlerFor(self::SIGINT) === null && self::getHandlerFor(self::SIGBREAK) === null) {
                sapi_windows_set_ctrl_handler(self::$windowsHandler, false);
                self::$windowsHandler = null;
            }
        }
        if (function_exists('pcntl_signal')) {
            foreach ($signals as $signal) {
                // skip missing signals, for example OSX does not have all signals
                if (!defined($signal)) {
                    continue;
                }
                // keep listening to signals where we have a handler registered
                if (self::getHandlerFor($signal) !== null) {
                    continue;
                }
                pcntl_signal(constant($signal), SIG_DFL);
            }
        }
    }
    
    /**
     * Clears all signal handlers
     *
     * On PHP 8+ this should not be necessary as it will happen automatically on __destruct, but PHP 7 does not
     * support weak references and thus there you need to manually do this.
     *
     * This can be done to reset the global state, but ideally you should always call ->unregister() in a try/finally block to ensure it happens.
     */
    public static function unregisterAll() : void {
        if (self::$windowsHandler !== null) {
            sapi_windows_set_ctrl_handler(self::$windowsHandler, false);
            self::$windowsHandler = null;
        }
        foreach (self::$handlers as $key => $handler) {
            if ($handler instanceof WeakReference) {
                $handler = $handler->get();
                if ($handler === null) {
                    unset(self::$handlers[$key]);
                    continue;
                }
            }
            $handler->unregister();
        }
    }
    
    /**
     * @param list<self::SIG*> $signals
     */
    private static function registerPcntlHandler(array $signals) : void {
        static $callable;
        if ($callable === null) {
            $callable = Closure::fromCallable([
                self::class,
                'handlePcntlSignal',
            ]);
        }
        foreach ($signals as $signal) {
            // skip missing signals, for example OSX does not have all signals
            if (!defined($signal)) {
                continue;
            }
            pcntl_signal(constant($signal), $callable);
        }
    }
    private static function handleWindowsSignal(int $event) : void {
        if (PHP_WINDOWS_EVENT_CTRL_C === $event) {
            self::callHandlerFor(self::SIGINT);
        }
        elseif (PHP_WINDOWS_EVENT_CTRL_BREAK === $event) {
            self::callHandlerFor(self::SIGBREAK);
        }
    }
    private static function handlePcntlSignal(int $signal) : void {
        self::callHandlerFor(self::getSignalName($signal));
    }
    
    /**
     * Calls the first handler from the top of the stack that can handle a given signal
     *
     * @param self::SIG* $signal
     */
    private static function callHandlerFor(string $signal) : void {
        $handler = self::getHandlerFor($signal);
        if ($handler !== null) {
            $handler->trigger($signal);
        }
    }
    
    /**
     * Returns the first handler from the top of the stack that can handle a given signal
     *
     * @param self::SIG* $signal
     * @return self|null
     */
    private static function getHandlerFor(string $signal) : ?self {
        foreach (self::$handlers as $key => $handler) {
            if ($handler instanceof WeakReference) {
                $handler = $handler->get();
                if ($handler === null) {
                    unset(self::$handlers[$key]);
                    continue;
                }
            }
            if (in_array($signal, $handler->signals, true)) {
                return $handler;
            }
        }
        return null;
    }
    
    /**
     * @return self::SIG*
     */
    private static function getSignalName(int $signo) : string {
        static $signals = null;
        if ($signals === null) {
            $signals = [];
            foreach (self::ALL_SIGNALS as $value) {
                if (defined($value)) {
                    $signals[constant($value)] = $value;
                }
            }
        }
        if (isset($signals[$signo])) {
            return $signals[$signo];
        }
        throw new \InvalidArgumentException('Unknown signal #' . $signo);
    }

}

Members

Title Sort descending Modifiers Object type Summary
SignalHandler::$handlers private static property
SignalHandler::$loggerOrCallback private property @readonly
SignalHandler::$signals private property @readonly
SignalHandler::$triggered private property
SignalHandler::$windowsHandler private static property @var Closure|null
SignalHandler::ALL_SIGNALS private constant
SignalHandler::callHandlerFor private static function Calls the first handler from the top of the stack that can handle a given signal
SignalHandler::create public static function @phpstan-param list&lt;self::SIG*|int&gt; $signals
@phpstan-param LoggerInterface|(callable(self::SIG* $name, SignalHandler $self): void) $loggerOrCallback
SignalHandler::exitWithLastSignal public function Exits the process while communicating that the handled signal was what killed the process
SignalHandler::getHandlerFor private static function Returns the first handler from the top of the stack that can handle a given signal
SignalHandler::getSignalName private static function
SignalHandler::handlePcntlSignal private static function
SignalHandler::handleWindowsSignal private static function
SignalHandler::isTriggered public function Fetches the triggered state of the handler
SignalHandler::registerPcntlHandler private static function
SignalHandler::reset public function Resets the state to let a handler accept a signal again
SignalHandler::SIGABRT public constant The SIGABRT signal is sent to a process to tell it to abort, i.e. to terminate. The signal is usually initiated
by the process itself when it calls abort function of the C Standard Library, but it can be sent to the process
from outside like any other…
SignalHandler::SIGALRM public constant The SIGALRM, SIGVTALRM and SIGPROF signal is sent to a process when the time limit specified in a call to a
preceding alarm setting function (such as setitimer) elapses. SIGALRM is sent when real or clock time elapses.
SIGVTALRM is sent when CPU time…
SignalHandler::SIGBABY public constant
SignalHandler::SIGBREAK public constant CTRL+Break support, available on Windows only for PHP_WINDOWS_EVENT_CTRL_BREAK
SignalHandler::SIGBUS public constant The SIGBUS signal is sent to a process when it causes a bus error. The conditions that lead to the signal being
sent are, for example, incorrect memory access alignment or non-existent physical address.
SignalHandler::SIGCHLD public constant The SIGCHLD signal is sent to a process when a child process terminates, is interrupted, or resumes after being
interrupted. One common usage of the signal is to instruct the operating system to clean up the resources used by
a child process after its…
SignalHandler::SIGCLD public constant
SignalHandler::SIGCONT public constant The SIGCONT signal instructs the operating system to continue (restart) a process previously paused by the
SIGSTOP or SIGTSTP signal. One important use of this signal is in job control in the Unix shell.
SignalHandler::SIGFPE public constant
SignalHandler::SIGHUP public constant The SIGHUP signal is sent to a process when its controlling terminal is closed. It was originally designed to
notify the process of a serial line drop (a hangup). In modern systems, this signal usually means that the
controlling pseudo or virtual…
SignalHandler::SIGILL public constant The SIGILL signal is sent to a process when it attempts to execute an illegal, malformed, unknown, or privileged
instruction.
SignalHandler::SIGINT public constant The SIGINT signal is sent to a process by its controlling terminal when a user wishes to interrupt the process.
This is typically initiated by pressing Ctrl-C, but on some systems, the &quot;delete&quot; character or &quot;break&quot; key can be
used.
SignalHandler::SIGIO public constant
SignalHandler::SIGIOT public constant
SignalHandler::SIGKILL public constant The SIGKILL signal is sent to a process to cause it to terminate immediately (kill). In contrast to SIGTERM and
SIGINT, this signal cannot be caught or ignored, and the receiving process cannot perform any clean-up upon
receiving this signal.
SignalHandler::SIGPIPE public constant The SIGPIPE signal is sent to a process when it attempts to write to a pipe without a process connected to the
other end.
SignalHandler::SIGPOLL public constant The SIGPOLL signal is sent when an event occurred on an explicitly watched file descriptor.Using it effectively
leads to making asynchronous I/O requests since the kernel will poll the descriptor in place of the caller. It
provides an alternative to…
SignalHandler::SIGPROF public constant The SIGPROF signal is sent to a process when the time limit specified in a call to a preceding alarm setting
function (such as setitimer) elapses. SIGPROF is sent when CPU time used by the process and by the system on
behalf of the process elapses.
SignalHandler::SIGPWR public constant The SIGPWR signal is sent to a process when the system experiences a power failure.
SignalHandler::SIGQUIT public constant The SIGQUIT signal is sent to a process by its controlling terminal when the user requests that the process quit
and perform a core dump.
SignalHandler::SIGSEGV public constant The SIGSEGV signal is sent to a process when it makes an invalid virtual memory reference, or segmentation fault,
i.e. when it performs a segmentation violation.
SignalHandler::SIGSTKFLT public constant
SignalHandler::SIGSTOP public constant The SIGSTOP signal instructs the operating system to stop a process for later resumption.
SignalHandler::SIGSYS public constant The SIGSYS signal is sent to a process when it passes a bad argument to a system call. In practice, this kind of
signal is rarely encountered since applications rely on libraries (e.g. libc) to make the call for them.
SignalHandler::SIGTERM public constant The SIGTERM signal is sent to a process to request its termination. Unlike the SIGKILL signal, it can be caught
and interpreted or ignored by the process. This allows the process to perform nice termination releasing
resources and saving state if…
SignalHandler::SIGTRAP public constant The SIGTRAP signal is sent to a process when an exception (or trap) occurs: a condition that a debugger has
requested to be informed of — for example, when a particular function is executed, or when a particular variable
changes value.
SignalHandler::SIGTSTP public constant The SIGTSTP signal is sent to a process by its controlling terminal to request it to stop (terminal stop). It is
commonly initiated by the user pressing Ctrl+Z. Unlike SIGSTOP, the process can register a signal handler for or
ignore the signal.
SignalHandler::SIGTTIN public constant The SIGTTIN signal is sent to a process when it attempts to read in from the tty while in the background.
Typically, this signal is received only by processes under job control; daemons do not have controlling
SignalHandler::SIGTTOU public constant The SIGTTOU signal is sent to a process when it attempts to write out from the tty while in the background.
Typically, this signal is received only by processes under job control; daemons do not have controlling
SignalHandler::SIGURG public constant The SIGURG signal is sent to a process when a socket has urgent or out-of-band data available to read.
SignalHandler::SIGUSR1 public constant The SIGUSR1 signal is sent to a process to indicate user-defined conditions.
SignalHandler::SIGUSR2 public constant The SIGUSR1 signa2 is sent to a process to indicate user-defined conditions.
SignalHandler::SIGVTALRM public constant The SIGVTALRM signal is sent to a process when the time limit specified in a call to a preceding alarm setting
function (such as setitimer) elapses. SIGVTALRM is sent when CPU time used by the process elapses.
SignalHandler::SIGWINCH public constant The SIGWINCH signal is sent to a process when its controlling terminal changes its size (a window change).
SignalHandler::SIGXCPU public constant The SIGXCPU signal is sent to a process when it has used up the CPU for a duration that exceeds a certain
predetermined user-settable value. The arrival of a SIGXCPU signal provides the receiving process a chance to
quickly save any intermediate…
SignalHandler::SIGXFSZ public constant The SIGXFSZ signal is sent to a process when it grows a file larger than the maximum allowed size
SignalHandler::trigger private function
SignalHandler::unregister public function Clears the signal handler
SignalHandler::unregisterAll public static function Clears all signal handlers
SignalHandler::__construct private function
SignalHandler::__destruct public function

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal