Пакет · thread

Сигналы и коды выхода

Точный справочник с одного взгляда: какие сигналы отправляет Winter Thread и какие коды выхода возвращает задача. Доставка сигналов требует расширения posix.

Сигналы, отправляемые Thread

Каждый метод действует на собственный дочерний процесс thread.

Метод Сигнал Перехватывается? Эффект
interrupt() SIGINT да Прерывание, как Ctrl+C. Задача может перехватить и обработать.
terminate() SIGTERM да Запрос корректного завершения. Игнорируется, если задача его не обрабатывает.
kill() SIGKILL нет Принудительное немедленное завершение. Нельзя перехватить, заблокировать или проигнорировать.
pause() SIGSTOP нет Заморозить процесс. Он остаётся в таблице процессов (isAlive() = true).
resume() SIGCONT Возобновить процесс, ранее приостановленный SIGSTOP.

Каждый метод возвращает true, если сигнал доставлен, и false, если процесс не выполняется. Полные сигнатуры — в справочнике API.

Сигналы, отправляемые Signal

Утилита Signal шлёт сигнал произвольному PID — она не проверяет, что PID принадлежит вашему процессу. Для управления жизненным циклом предпочитайте методы Thread.

Метод Сигнал
Signal::interrupt($pid) SIGINT
Signal::termination($pid) SIGTERM
Signal::close($pid) SIGHUP
Signal::kill($pid) SIGKILL
Signal::isProcessRunning($pid) 0 (probe)

Signal::wait(), interruptAndWait(), terminationAndWait() и closeAndWait() совмещают сигнал с опросом, пока процесс не завершится или не истечёт таймаут.

Переиспользование PID

Поскольку ОС переиспользует PID, «сырой» PID к моменту отправки сигнала может указывать на посторонний процесс. Прочитайте Переиспользование PID и сигналы прежде, чем полагаться на Signal.

Коды выхода

join() возвращает код выхода дочернего процесса. Сам runner использует два собственных кода:

Код Значение
0 Задача выполнена — run() завершился без исключения.
1 Обработанная ошибка — непойманное исключение в run(), пустой или некорректный payload либо ошибка чтения разделяемой памяти. Runner пишет причину в stderr.

Коды вне этого набора приходят от ОС или самого PHP — например, фатальная ошибка PHP или процесс, завершённый сигналом, — и передаются как есть.

Служебные значения join() — не коды выхода

join() также возвращает null (истёк таймаут) и -1 (thread не запускался). Это возвращаемые значения join(), а не коды, с которыми завершился процесс. Таблица — в справочнике API.

Связанное