Now if we take that same simple program and either don't define $SIG{'TERM'} or set it to 'DEFAULT' we get END when the parent dies, but when we kill the child &cleanup isn't run (duh) but neither is END. Is that standard behaviour? I would've thought it'd try to do END if at all possible to clean up after itself.
Lessee, I think it's a kill 9 that can't be caught. And maybe kill 15, but I've never played with that. Other signals can be caught, but I've only done that in C, so my memory may be faded.