SIGKILL
всегда убивает цель процесс . Обойти это невозможно; он не блокируемый, неуважительный и неуловимый.
Вы можете попробовать отправить другой сигнал (например, SIGUSR1
или SIGHUP
или SIGRTMIN
) и установить обработчик сигнала, который вызывает pthread_exit
(но учтите, что эта функция не безопасна для асинхронного сигнала, поэтому вы должен убедиться, что обработчик сигнала не прерывал другую небезопасную асинхронную функцию) или использовать отмену (pthread_cancel
), чтобы остановить заблокированный поток.
Это должно работать для обычных операций блокировки (например, ожидания данных из канала или сокета), но это не поможет вам, если поток находится в непрерывном спящем состоянии (например, попытка чтения с сильно поцарапанного компакт-диска или сбой жесткого диска). диск).