GNU Shepherd works on GNU/Linux as well as GNU/Hurd. The problem is that Linux doesn't really have any sane way of tracking double-forked processes. A misuse of the cgroup API is to do that (and I do mean misuse, reading cgroups.proc is not atomic and will cause repetitions and dropped entries if you read more than a single page of data). But that's still better than using ptrace's POSIX-breaking pseudo-parent semantics (see Upstart, though they apparently switched to using the proc connector API which is sort of like ptrace-lite).
I would presume they'd separate out that particular detail into separate modules.