Tor should prctl(PR_SET_PDEATHSIG, SIGTERM) background processes.
From the man page: ``` PR_SET_PDEATHSIG (since Linux 2.1.57) Set the parent process death signal of the calling process to arg2 (either a signal value in the range 1..maxsig, or 0 to clear). This is the signal that the calling process will get when its parent dies. This value is cleared for the child of a fork(2) and (since Linux 2.4.36 / 2.6.23) when executing a set- user-ID or set-group-ID binary, or a binary that has associated capabilities (see capabilities(7)). This value is preserved across execve(2). ``` This will ensure at least on Linux that all background processes will get a `SIGTERM` if Tor dies, and can cleanup appropriately. I don't think this behavior would be particularly shocking to PT developers (who should be handling SIGTERM already), so this probably doesn't even need a spec patch since "tor dying" invoking the normal termination signaling is appropriate. The choice of `SIGTERM` over `SIGKILL` here is so that PTs have the option to trap it and terminate their own children as appropriate. Pros: * Easy to do. * The kernel does all of the heavy lifting for us, as a catchall. * Fixes certain nasty issues in unmodified pt code on the relevant platform automatically. Cons: * Non-portable (legacy/trac#15435 aka legacy/trac#10047 is a portable fix that requires pt modification). * We have pts (obfs4proxy in particular) that can be ran with elevated capabilities.
issue