I do use setsid when spawning the children (I omitted it from the post, but I set it in the dsme pre_exec call where I configure DEATHSIG) but they don't receive any signal, IIRC. Or if they do, it does not seem to be propagated to their children.
If you read exit(3) you'll see that you also need a controlling terminal for the kernel to send SIGHUP to the processes in your foreground process group.
In python it'd look roughly like:
master, slave = os.openpty()
# ensure we can call setsid successfully
try:
pid = os.fork()
if pid > 0:
os.close(master)
os.close(slave)
sys.exit(0)
finally:
sys.exit(1)
os.setsid()
# we are now session leader and process group leader
fcntl.ioctl(master, termios.TIOCSCTTY, 0)
# we now have a controlling pty - closing master will send us a SIGHUP
os.close(slave)
# go start spawning subprocesses - if _this_ process is killed, they will receive SIGHUPs. Unless they take themselves out of your session or the foreground process group.