Что происходит с дочерними потоками, когда их родитель умирает в GHC Haskell?

Документация дляforkIO говорит

GHC note: the new thread inherits the masked state of the parent (see mask).

The newly created thread has an exception handler that discards the exceptions
BlockedIndefinitelyOnMVar, BlockedIndefinitelyOnSTM, and ThreadKilled, and passes
all other exceptions to the uncaught exception handler.

Почему дочерний обработчик исключений сбрасываетThreadKilled? Есть ли какая-то связь между двумя потоками после их создания?

Что именно происходит, когда родительский поток умирает? Воспитывает ли ребенок какое-либо исключение? Или можно ли вообще с точки зрения ребенка увидеть, что родитель умер? Есть ли что-нибудь еще, кроме того, что родительский поток просто перестает работать?

Причина, по которой я спрашиваю об этом, заключается в том, что во многих случаях я вынужден создавать поток в контексте, где я не могу получить доступ к области видимости родителя. Просто представьте, что вы где-то глубоко в библиотеке и вам нужно позвонитьforkIOи пусть этот поток умирает, когда умирает родитель. Нужно ли реструктурировать программу и пропагандироватьThreadId до родителя и явно его убить? Или есть какой-то другой обходной путь для этого?

Ответы на вопрос(3)

Ваш ответ на вопрос