gpt4 book ai didi

c - 在内核模块 solaris 中获取进程启动时间

转载 作者:太空宇宙 更新时间:2023-11-03 23:19:28 25 4
gpt4 key购买 nike

我正在尝试在内核模块中获取进程启动时间。
我得到 proc struct pointer ,并从 proc 中获取字段 p_mstart ()

typedef struct  proc {
.....
/*
* Microstate accounting, resource usage, and real-time profiling
*/
hrtime_t p_mstart; /* hi-res process start time */

这会给我返回号码:1976026375725303

struct proc* iterated_process_ptr = curproc
LOG("***KERNEL***: PID=%d, StartTime=%lld",iterated_process_ptr->p_pidp->pid_id, iterated_process_ptr->p_mstart);

这个数字是多少?在文档 solaris 中写:

The gethrtime() function returns the current high-resolution real time. Time is expressed as nanoseconds since some arbitrary time in the past.

他们在《Solaris Internals》一书中写道:

Within the process, the operating system maintains a high-resolution teimstamp that marks process start and terminate times, A p_mstart field, the process start time, is set in the kernel fork() code when the process is created.... it return 64-bit value expressed in nanosecond

数字 1976026375725303 根本没有意义。
如果我除以 1,000,000,000,然后除以 3600 以获得小时数,我得到 528 小时,22 天,但我的正常运行时间是 5 天..

最佳答案

基于在 google 组收到的答案:comp.unix.solaris。

而不是去 proc -> p_mstart

我需要带走

iterated_process_ptr ->p_user.u_start  

这给我带来了与用户空间相同的结构(timestruc_t)

typedef struct psinfo {  

psinfo ->pr_start; /* process start time, from the epoch */

关于c - 在内核模块 solaris 中获取进程启动时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44755358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com