On Mon, Apr 1, 2019 at 9:22 AM Daniel Colascione <dancol@xxxxxxxxxx> wrote: > > There's a subtlety: suppose I'm a library and I want to create a > private subprocess. I use the new clone facility, whatever it is, and > get a pidfd back. I need to be able to read the child's exit status > even if the child exits before clone returns in the parent. Doesn't > this requirement imply that the pidfd, kernel-side, contain something > a bit more than a struct pid? Note that clone() has always supported this, but it has basically never been used. One of the early thinkings behind clone() was that it could be used for basically "AIO in user space", by having exactly these kinds of library-private internal subthreads that are hidden as real threads. It's why we have that special CSIGNAL mask for setting the exit signal. It doesn't *just* set the signal to be sent when the thread exits - setting the signal to something else than SIGCHLD actually changes behavior in other ways too. In particular a non-SIGCHLD thread won't be found by a regular "waitpid()". You have to explicitly wait for it with __WCLONE (which in turn is supposed to be used with the explicit pid to be waited for). Now, none of this was ever really used. The people who wanted AIO wanted the brain-damaged POSIX kind of AIO, not something cool and clever. So I suspect the whole exit-signal thing was just used for random small per-project things. Linus