POSIX - pthread_kill ()?

0

Почему этот поток продолжает выполнение, хотя я его убиваю???

pthread_t pid;
pthread_create(&pid, NULL, (func)countdown, NULL);
pthread_kill(pid, 1);
pthread_join(pid, NULL);
Теги:
multithreading
pthreads

1 ответ

1

pthread_kill - функция отправки сигналов в поток. Вы в настоящее время посылаете ему сигнал 1, который является SIGHUP. Стандартными сигналами для запроса или принудительного прекращения являются SIGTERM и SIGKILL, которые равны соответственно 15 и 9.

Кроме того, вы должны использовать константы, а не магические числа для отправки сигналов. Они определены в signal.h. Документация по сигналам даст вам более подробную информацию.

Обновление: Комментарий от nos, правильный способ прекращения потоков (а не всего приложения) - использовать pthread_cancel. Использование описанного выше pthread_kill будет иметь тенденцию убивать весь процесс, если принимающий поток не регистрирует обработчик сигнала.

  • 2
    Способ завершения потоков - с помощью pthread_cancel, а не pthread_kill (но даже это требует особой осторожности). С помощью pthread_kill, если действие завершается, завершается весь процесс, а не только поток.
  • 0
    @nos, спасибо за исправление. Я обновлю свой ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню