API 检索进程创建时间 (Linux)
API to retrieve process creation time (Linux)
我正在寻找一个 API 进程可以使用它来确定自己的创建时间戳。 'creation timestamp' 是指进程“诞生”的时间点,即诞生时间戳。
我的具体情况:
- 我需要这个程序是一个 C++ 库;和
- 使用gcc 7.3.1编译;和
- 在 Linux 上运行,准确地说是 Red Hat Enterprise Linux 服务器版本 6.8 (Santiago)。
- 我需要至少达到毫秒精度。
- 我不知道 access/control 程序启动时发生了什么(因为我正在处理一个库,被各种应用程序使用)
我已经搜索了一段时间,但没有找到解决我问题的方法。下面列出了两个最有希望的候选人:
在 /proc/PID/stat
中查找 starttime
/proc/PID/stat
文件似乎提供了一个名为 starttime
的字段(条目 22)。参考文档:https://man7.org/linux/man-pages/man5/proc.5.html
这样我还需要:
- 查找机器开机时间;
- 将
starttime
从 jiffies 转换为微秒;
- 计算一下将其“添加”到启动时间。
这并非不可能,但我希望有更简单的途径来获取我需要的信息。截至目前,我不知道如何获得系统启动时间(至少具有微秒精度)。我知道 start time of a process on linux - 但此计算使用的 btime
只有秒级精度,因此精度不足以满足要求:|
stat
函数
根据 https://man7.org/linux/man-pages/man2/stat.2.html,stat
函数可以为我提供各种与文件相关的时间戳,最值得注意的是:
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 版本才能利用它。
我正在寻找一个 API 进程可以使用它来确定自己的创建时间戳。 'creation timestamp' 是指进程“诞生”的时间点,即诞生时间戳。
我的具体情况:
- 我需要这个程序是一个 C++ 库;和
- 使用gcc 7.3.1编译;和
- 在 Linux 上运行,准确地说是 Red Hat Enterprise Linux 服务器版本 6.8 (Santiago)。
- 我需要至少达到毫秒精度。
- 我不知道 access/control 程序启动时发生了什么(因为我正在处理一个库,被各种应用程序使用)
我已经搜索了一段时间,但没有找到解决我问题的方法。下面列出了两个最有希望的候选人:
在 /proc/PID/stat
中查找 starttime
/proc/PID/stat
文件似乎提供了一个名为 starttime
的字段(条目 22)。参考文档:https://man7.org/linux/man-pages/man5/proc.5.html
这样我还需要:
- 查找机器开机时间;
- 将
starttime
从 jiffies 转换为微秒; - 计算一下将其“添加”到启动时间。
这并非不可能,但我希望有更简单的途径来获取我需要的信息。截至目前,我不知道如何获得系统启动时间(至少具有微秒精度)。我知道 start time of a process on linux - 但此计算使用的 btime
只有秒级精度,因此精度不足以满足要求:|
stat
函数
根据 https://man7.org/linux/man-pages/man2/stat.2.html,stat
函数可以为我提供各种与文件相关的时间戳,最值得注意的是:
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 版本才能利用它。