Hello, Excuse me if this is a basic POSIX question.
Consider a machine with an s6-linux-init-maker-style setup, that also uses s6-rc in the stage2 and stage2_finish scripts. Longruns managed by s6-rc without a 'producer-for' file in their definition directory have their stdout and stderr redirected to the catch-all logger, and so do oneshots via the s6rc-oneshot-runner service. So if one wants to have a service output to the console instead (e.g. an early one in the boot process), its definition would have to do explicit redirections to /dev/console. But should the service also be turned into a session leader and set a controlling terminal, or only in special cases? I thought that this was needed only in special cases, like in processes that end up spawning a shell, but I see other init systems sometimes do it automatically. For example, with nosh, a service configured to output to a terminal AND defined using a systemd unit file, when converted to a bundle directory (nosh's version of a service definition directory) with the converter tool, has a 'run' script that calls open-controlling-tty (nosh's chainloading utility to open a device as a controlling terminal). And sysvinit's code has setsid() and TIOCSCTTY ioctl() calls for child processes, depending on the 'runlevel' and 'action' fields of the corresponding line in /etc/inittab. What those two cases have in common is that the mechanism involved also unconditionally redirects stdin to a terminal device; in the nosh case, I'm not sure if because of a limitation of the unit file-to-bundle directory converter. But I don't know why the "controlling terminal maneuver" is done there, so I now wonder if s6-rc service definitions would also require it in more cases than I thought, instead of simple FD redirections. Thanks, G.
