function SignalHandler::create
@phpstan-param list<self::SIG*|int> $signals @phpstan-param LoggerInterface|(callable(self::SIG* $name, SignalHandler $self): void) $loggerOrCallback
Parameters
(string|int)[] $signals array of signal names (more portable, see SignalHandler::SIG*) or constants - defaults to [SIGINT, SIGTERM]:
LoggerInterface|callable $loggerOrCallback A PSR-3 Logger or a callback($signal, $signalName):
Return value
self A handler on which you can call isTriggered to know if the signal was received, and reset() to forget
4 calls to SignalHandler::create()
- CreateProjectCommand::installRootPackage in vendor/
composer/ composer/ src/ Composer/ Command/ CreateProjectCommand.php - InstallationManager::execute in vendor/
composer/ composer/ src/ Composer/ Installer/ InstallationManager.php - Executes solver operation.
- ProcessExecutor::runProcess in vendor/
composer/ composer/ src/ Composer/ Util/ ProcessExecutor.php - RequireCommand::execute in vendor/
composer/ composer/ src/ Composer/ Command/ RequireCommand.php
File
-
vendor/
seld/ signal-handler/ src/ SignalHandler.php, line 361
Class
- SignalHandler
- SignalHandler and factory
Namespace
Seld\SignalCode
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;
}