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?
The following is from perlfaq8 (perldoc perlfaq8):
The END block isn't called when untrapped signals kill the program, though, so if you use END blocks you should also use
use sigtrap qw(die normal-signals);
Which I think is what you're after.
Neil