All shells return the reason for their exit to the kernel, this is $signal_num
- ordinarily this is 0 (EXIT); See here
for examples and indeed, far better descriptions.
In addition to the above, there are quite a number of cases whereby a shell exits with a non-0 signal sufficiently severely to warrant a post-exit investigation - in these cases, the shell 'core dumps' in order to fascilitate the root cause investigation - this is the meaning of $dumped_core - i.e. it's set if and only if, the shell core dumped as a result of a 'bad' exit.
A user level that continues to overstate my experience :-))