Есть ли у процесса точки отмены, такие как pthread?
Нет.
Учитывает ли SIGKILL эти точки отмены?
Нет, потому что их нет. Когда SIGKILL
доставляется процессу, он умирает. Если он ожидает завершения каких-либо системных вызовов, это ожидание прерывается. Ни один поток не выполняет никаких дальнейших вычислений и не выполняет какую-либо очистку, но очистка при завершении, выполняемая ОС (закрытие открытых файлов, освобождение памяти, ...), как правило, все еще происходит. SIGKILL
нельзя поймать, заблокировать или проигнорировать.
Сравните SIGTERM
, что немного мягче. Когда процесс получает SIGTERM
, которое можно отложить, заблокировав его, или предотвратить, игнорируя, результат зависит от того, зарегистрирован ли для него обработчик сигнала. Если это так, то любой системный вызов, выполняемый потоком, выбранным для приема сигнала, прерывается и вызывается обработчик сигнала. Дополнительные эффекты определяются программой c. Если обработчик не зарегистрирован, программа переходит к выполнению чистого (-i sh) завершения, включая вызов зарегистрированных обработчиков выхода перед фактическим завершением.
Изменяет ли сигнал состояния процесса для запуска обработчика сигнала?
Я не уверен, что вы имеете в виду, но в случае SIGKILL
обработчики сигналов не вызываются. В более широком смысле, однако, когда обработчики сигналов все же выполняются, например, в случае SIGTERM
, они асинхронны по отношению к выполнению потока, в котором они выполняются.
Если да, означает ли это, что процесс никогда не завершит себя, если он никогда не получит процессор.
Завершение процесса доставкой ему SIGKILL
не требует какого-либо взаимодействия со стороны процесса. Все важные операции выполняются ядром, и, поскольку оно отвечает за планирование ресурсов выполнения, вы не можете легко отказать ядру в том процессорном времени, которое ему нужно.
Доставка SIGTERM
процессу на с другой стороны, не всегда удается его прекратить. Процесс может блокировать или игнорировать сигнал или обрабатывать его без завершения. Даже если он не выполняет ничего из этого, его обработчики выхода (если таковые имеются) будут выполняться до его завершения, и они могут отложить его фактическое завершение на неопределенный срок. В принципе, вы можете предотвратить завершение завершения, запретив планирование процесса в любое время ЦП.