主要观点:介绍了 Linux 内核中 pidfd 的相关信息,包括其作用、获取方式及可进行的操作等。
关键信息:
- pidfd 是一种特殊文件,可持有进程引用,能以无竞争方式进行某些进程相关操作,可用于检测进程终止。
- 有多种获取 pidfd 的方式,不同内核版本和 glibc 版本对应不同函数。
- 获得 pidfd 后可进行多种操作,如发送信号、获取进程 pid、使用 poll/select/epoll 监测等。
- 进程有 alive(存活)、zombie(僵尸)、dead(死亡)状态,各状态有不同特性。
重要细节: clone
与CLONE_PIDFD
标志:5.2 内核及相应 glibc 版本可用,指定该标志可返回 pidfd 及子进程 pid,O_CLOEXEC
标志自动设置等。clone3
与CLONE_PIDFD
标志:5.3 内核可用,是更可扩展的clone
版本。pidfd_open
:5.3 内核及 2.36 glibc 版本可用,传入 pid 号可获取 pidfd,5.10 后可传PIDFD_NONBLOCK
标志。pidfd_spawn
/pidfd_spawnp
:5.4 内核及 2.39 glibc 版本可用,类似posix_spawn
,输出参数为 pidfd。getsockopt
与SO_PEERPIDFD
:6.5 内核及相应 glibc 版本可用,用于获取与套接字相关进程的 pidfd。recvmsg
与SCM_PIDFD
:6.5 内核及相应 glibc 版本可用,用于接收消息时获取发送者进程的 pidfd。- 各操作函数的特性及适用条件,如
pidfd_send_signal
、pidfd_getpid
、poll
/select
/epoll
、waitid
等。 - 后续提到的进程状态变化及相关影响,如僵尸进程等待获取退出码等。
- 未来可能的发展方向,如获取死进程的退出码等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。