Messages in this thread | | | Date | Sun, 31 Mar 2019 23:10:42 +0200 | From | Christian Brauner <> | Subject | Re: [PATCH v2 0/5] pid: add pidfd_open() |
| |
On Sun, Mar 31, 2019 at 02:03:25PM -0700, Linus Torvalds wrote: > On Sun, Mar 31, 2019 at 1:38 PM Andy Lutomirski <luto@amacapital.net> wrote: > > > > openat(fd to pidfd’s proc directory, “status”, ...); > > > > And we want a non-utterly-crappy way to do this. The ioctl is certainly ugly, but it *works*. > > It's beyond clunky. It's a disgrace. > > If people really want equivalency between open("/proc/%d") and some > new pidfd_open(), then just *make* the two equivalent.
I don't think that we want or can make them equivalent since that would mean we depend on procfs. If userspace really wants to turn a pidfd into an fd for /proc/<pid> then they can be burdened to do so by parsing out the pid relative to their procfs pid namespace from the pidfds fdinfo:
int pidfd = pidfd_open(pid, 0); int pid = parse_fdinfo("/proc/self/fdinfo/<pidfd>"); int procpidfd = open("/proc/<pid>", ...);
/* Test if process still exists by sending signal 0 through our pidfd. */ int ret = pidfd_send_signal(pid, 0, NULL, PIDFD_SIGNAL_THREAD); if (ret < 0 && errno == ESRCH) { /* pid has been recycled and procpidfd refers to another process */ }
it's race free and no ioctl() is needed.
> > No effing crappy ioctl idiocy to create one from the other. Just make > the damn things be the exact same thing (and then if we extend clone() > to return one, make that return the same exact thing too). > > Btw, we have several clone bits left: > > - if we don't have CLONE_PARENT set, the low 8 bits are still available > > - ignoring that, wehave bit #12 free: It used to be CLONE_IDLETASK > long long ago, but it was always kernel-only so it's never been > exposed as a user space bit.
That's good to know.
| |