API 检索进程创建时间 (Linux)

API to retrieve process creation time (Linux)

我正在寻找一个 API 进程可以使用它来确定自己的创建时间戳。 'creation timestamp' 是指进程“诞生”的时间点,即诞生时间戳。

我的具体情况:

我已经搜索了一段时间,但没有找到解决我问题的方法。下面列出了两个最有希望的候选人:

/proc/PID/stat

中查找 starttime

/proc/PID/stat 文件似乎提供了一个名为 starttime 的字段(条目 22)。参考文档:https://man7.org/linux/man-pages/man5/proc.5.html

这样我还需要:

这并非不可能,但我希望有更简单的途径来获取我需要的信息。截至目前,我不知道如何获得系统启动时间(至少具有微秒精度)。我知道 start time of a process on linux - 但此计算使用的 btime 只有秒级精度,因此精度不足以满足要求:|

stat函数

根据 https://man7.org/linux/man-pages/man2/stat.2.htmlstat 函数可以为我提供各种与文件相关的时间戳,最值得注意的是:

struct timespec st_atim;  /* Time of last access */
struct timespec st_mtim;  /* Time of last modification */
struct timespec st_ctim;  /* Time of last status change */

然而,正如 https://man7.org/linux/man-pages/man7/inode.7.html 中所解释的那样,似乎 none 实际上保证等于出生时间戳,因为所有这些时间戳都可以通过某些操作更新(reads/writes等)

看来我要的是File creation (birth) timestamp (btime)。 linux 手册页有以下内容:

File creation (birth) timestamp (btime)
      (not returned in the stat structure); statx.stx_btime

      The file's creation timestamp.  This is set on file creation
      and not changed subsequently.

      The btime timestamp was not historically present on UNIX
      systems and is not currently supported by most Linux
      filesystems.

所以...我不确定获取进程创建时间的最佳方法是什么。感谢您阅读到这里,您真棒!

POSIX stat 没有定义这个字段,但是你可以从 statx.

得到它

这是在 2019 年初添加的,因此您需要相当新的内核和 glibc 版本才能利用它。