Although this is used in apps that use `tokio`, if we're going to
support `smol`, this seems suboptimal to require.
This assumes the function will be called by a tokio executor if the
`tokio` feature is used. Otherwise it can be spawned from any executor.
That should be consistent with everything else.
This fails to compile without either the `tokio` or `smol` feature. This
seems reasonable, since `zbus` also fails to compile in that case.
`rustix` and `libc` are already in the dependency tree, and `rustix`
follows IO safety rules, so use those.
We can use a pipe to get the PID of the double-forked process.