В Linux 2.6 с использованием потоков NPTL: я предполагаю, что процесс использует обработчик сигналов по умолчанию или вызывает в нем функцию exit (): Да, это так. Вызов exit () из библиотеки C отображается на системный вызов exit_group, который немедленно завершает работу всех потоков; обработчик сигнала по умолчанию вызывает это или что-то подобное.
В Linux 2.4 с использованием Linuxthreads (или с использованием 2.6, если ваше приложение все еще использует Linuxthreads по какой-то странной причине): необязательно.
Библиотека Linuxthreads реализует потоки с помощью clone (), создавая новый процесс, который делится своим адресным пространством с родителем. Это не обязательно умирает, когда умирает родитель. Чтобы это исправить, существует «главный поток», который создает pthreads. Этот главный поток выполняет различные действия, одна из них - попытаться убедиться, что все потоки будут уничтожены при выходе из процесса (по любой причине).
- Это не обязательно удастся
- Если это успешно, это не обязательно немедленно, особенно если есть большое количество потоков.
Так что, если вы используете Linuxthreads, возможно, нет.
Другие потоки могут не завершиться немедленно или вообще не работать.
Однако, независимо от того, какую библиотеку потоков вы используете, разветвленные дочерние процессы будут продолжаться (они могут получить сигнал, если они все еще находятся в той же группе процессов, но могут свободно его игнорировать)