pidfd 到底是什么呢?

主要观点:介绍了 Linux 内核中 pidfd 的相关信息,包括其作用、获取方式及可进行的操作等。
关键信息

  • pidfd 是一种特殊文件,可持有进程引用,能以无竞争方式进行某些进程相关操作,可用于检测进程终止。
  • 有多种获取 pidfd 的方式,不同内核版本和 glibc 版本对应不同函数。
  • 获得 pidfd 后可进行多种操作,如发送信号、获取进程 pid、使用 poll/select/epoll 监测等。
  • 进程有 alive(存活)、zombie(僵尸)、dead(死亡)状态,各状态有不同特性。
    重要细节
  • cloneCLONE_PIDFD 标志:5.2 内核及相应 glibc 版本可用,指定该标志可返回 pidfd 及子进程 pid,O_CLOEXEC 标志自动设置等。
  • clone3CLONE_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。
  • getsockoptSO_PEERPIDFD:6.5 内核及相应 glibc 版本可用,用于获取与套接字相关进程的 pidfd。
  • recvmsgSCM_PIDFD:6.5 内核及相应 glibc 版本可用,用于接收消息时获取发送者进程的 pidfd。
  • 各操作函数的特性及适用条件,如 pidfd_send_signalpidfd_getpidpoll / select / epollwaitid 等。
  • 后续提到的进程状态变化及相关影响,如僵尸进程等待获取退出码等。
  • 未来可能的发展方向,如获取死进程的退出码等。
阅读 15
0 条评论