History

pidfd: implement PIDFD_THREAD flag for pidfd_open()

With this flag: - pidfd_open() doesn't require that the target task must be a thread-group leader - pidfd_poll() succeeds when the task exits and becomes a zombie (iow, passes exit_notify()), even if it is a leader and thread-group is not empty. This means that the behaviour of pidfd_poll(PIDFD_THREAD, pid-of-group-leader) is not well defined if it races with exec() from its sub-thread; pidfd_poll() can succeed or not depending on whether pidfd_task_exited() is called before or after exchange_tids(). Perhaps we can improve this behaviour later, pidfd_poll() can probably take sig->group_exec_task into account. But this doesn't really differ from the case when the leader exits before other threads (so pidfd_poll() succeeds) and then another thread execs and pidfd_poll() will block again. thread_group_exited() is no longer used, perhaps it can die.

Oleg Nesterov committed 2 years ago

Commit 64bef691 parent 21e25207 files · +54 −23Browse files

Showing the changes to include/uapi (1 of 7 files). Show all

Unified · Split

include/uapi/linux/pidfd.h+2−1
@@ -7,6 +7,7 @@ · 6 unmodified lines
7#include <linux/fcntl.h>7#include <linux/fcntl.h>
8 8
9/* Flags for pidfd_open(). */9/* Flags for pidfd_open(). */
10#define PIDFD_NONBLOCK O_NONBLOCK10#define PIDFD_NONBLOCK O_NONBLOCK
11#define PIDFD_THREAD O_EXCL
11 12
12#endif /* _UAPI_LINUX_PIDFD_H */13#endif /* _UAPI_LINUX_PIDFD_H */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t