-
-
Couldn't load subscription status.
- Fork 1.6k
Description
hi,
The GNU coreutils version of stdbuf are implemented by setting the LD_PRELOAD and other environment variables and then calling exec() on the requested command. This means that the command ends up having the PID that the parent expects it to and can be signalled. It also means PR_SET_PDEATHSIG affects the command in question.
The uutils replacement uses spawning (and collecting the return value and returning it) as an alternative but doesn't arrange to forward signals. Even if it did attempt to forward some signals, it could never forward SIGKILL, and PR_SET_PDEATHSIG also doesn't end up getting correctly set on the spawned process, because of the extra fork().
This has shown up as a failure in the CI of Cockpit as we attempt to adjust to the inclusion of uutils coreutils in the latest Ubuntu version.
In my opinion, the only way to fix this that's fully compatible with the existing GNU behaviour is to directly use exec() instead of forking. I understand that this is probably unsafe but I think it's necessary in this case...