Как завершаются потоки во время сбоя linux?

Если у вас есть многопоточная программа (ядро Linux 2.26), и один поток делает что-то, что вызывает segfault, другие потоки все еще будут запланированы для запуска? Как заканчиваются другие темы? Может кто-нибудь объяснить процедуру завершения процесса в отношении многопоточных программ?

7
задан Andrew 27 August 2010 в 20:19
поделиться

2 ответа

Когда в поток доставляется фатальный сигнал, вызывается функция do_coredump() или do_group_exit(). do_group_exit() устанавливает код выхода группы потоков, а затем сигнализирует всем другим потокам в группе потоков о выходе с помощью zap_other_threads() перед выходом из текущего потока. . (do_coredump() вызывает coredump_wait(), который аналогичным образом вызывает zap_threads()).

zap_other_threads() отправляет SIGKILL для каждого второго потока в группе потоков и пробуждает его с помощью signal_wake_up(). signal_wake_up() вызывает kick_process(), который загружает поток в режим ядра, чтобы он мог получить сигнал, используя IPI1, если это необходимо (например, ., если он выполняется на другом процессоре).


1. Межпроцессорное прерывание
7
ответ дан 6 December 2019 в 21:08
поделиться

Будет ли запланирован запуск другого потока?

Нет. SEGV — это проблема уровня процесса. Если вы не обработали SEGV (что почти всегда является плохой идеей), весь ваш процесс завершится, а вместе с ним и все потоки.

Я подозреваю, что другие темы обрабатываются не очень хорошо. Если обработчик вызывает exit() или _exit(), обработчики очистки потока не вызываются. Это может быть хорошо, если ваша программа сильно повреждена, после ошибки seg будет трудно доверять чему-либо.

Одно примечание из справочной страницы сигнала:

Согласно POSIX, поведение процесса не определено после того, как он игнорирует сигнал SIGFPE, SIGILL или SIGSEGV, который не был сгенерирован командой kill( 2) или функции повышения(3).

После segfault вы действительно не хотите делать ничего, кроме как избавиться от этой программы.

5
ответ дан 6 December 2019 в 21:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: