gpt4 book ai didi

struct proc 中的starttime 与solaris 中的struct psinfo_t 的比较

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:58 24 4
gpt4 key购买 nike

在 Solaris 中,
我需要从内核空间和用户空间获取进程启动时间。
我找到给定进程的 2 个开始时间,它们不相等!
一个位于 proc struct (链接很旧但结构几乎相同)并且一个在 ps_info struct 上.
在执行期间,在内核空间中,如果我使用

struct proc* iterated_process_ptr = curproc;

我得到以下结构:

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

如果我像这样从用户空间结构中填充 psinfo_t:

char psfile[64];
psinfo_t psinfo;
sprintf(psfile, "/proc/ProcessID/psinfo");
if ((fd = open(psfile, O_RDONLY)) >= 0)
if (read(fd, &psinfo, sizeof(psinfo_t)) != -1)

struct psinfo 已填充,看起来像:

typedef struct psinfo {
timestruc_t pr_start; /* process start time, from the epoch */

两个开始时间有什么区别?

如果我对同一个进程执行此操作,则值不同,这意味着高分辨率进程开始时间与进程纪元开始时间不同。

什么是高分辨率进程启动?

谢谢

最佳答案

结构的p_mstart字段is filled in here in OpenSolaris (see line 1008)fork() 系统调用下:

    /*
* Make proc entry for child process
*/
mutex_init(&cp->p_splock, NULL, MUTEX_DEFAULT, NULL);
mutex_init(&cp->p_crlock, NULL, MUTEX_DEFAULT, NULL);
mutex_init(&cp->p_pflock, NULL, MUTEX_DEFAULT, NULL);
#if defined(__x86)
mutex_init(&cp->p_ldtlock, NULL, MUTEX_DEFAULT, NULL);
#endif
mutex_init(&cp->p_maplock, NULL, MUTEX_DEFAULT, NULL);
cp->p_stat = SIDL;
cp->p_mstart = gethrtime();
cp->p_as = &kas;

Per the man page for gethrtime() :

The gethrtime() function returns the current high-resolution real time. Time is expressed as nanoseconds since some arbitrary time in the past; it is not correlated in any way to the time of day

因此,p_mstart 字段填充了一个时间,通过与当前调用 gethrtime():

hrtime_t duration = gethrtime - p->p_mstart;

关于struct proc 中的starttime 与solaris 中的struct psinfo_t 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44746521/

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