Как завершаются потоки во время сбоя Linux? - PullRequest
7 голосов
/ 28 августа 2010

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

Ответы [ 2 ]

7 голосов
/ 30 августа 2010

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

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


1. Межпроцессорное прерывание
5 голосов
/ 28 августа 2010

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

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

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

Одна заметка из справочного руководства :

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...