gpt4 book ai didi

c++ - Solaris 10 x86 C++ 上的 GetThreadTimes

转载 作者:太空宇宙 更新时间:2023-11-04 12:22:51 26 4
gpt4 key购买 nike

我想要类似于 VC++ GetThreadTimes() 函数的类似函数在 Solaris 上运行。我需要一个监视工具来监视线程并从另一个线程监视执行时间。有直接的方法吗?

我发现 getrusage() 只能为调用线程获取 times() 的值。但我想做的是从另一个线程监视线程时间。我最后的办法是修改 CreateThread() 的实现,将 sig 处理程序硬连接到要执行的线程。并使用 sighandler 为我抓取数据。但我还不知道这是否可行。

最佳答案

在 Solaris 上,您可以通过映射/proc/PID/lwp/LWPID/lwpstatus 来完成此操作

简单的例子:

#define _STRUCTURED_PROC 1

#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/procfs.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <assert.h>

int main() {
const time_t start = time(NULL);
while (time(NULL) - start < 10);
int fd = open("/proc/self/lwp/1/lwpstatus", O_RDONLY);
assert(fd >= 0);
lwpstatus_t status;
const ssize_t ret = read(fd, &status, sizeof(lwpstatus_t));
close(fd);
assert(sizeof(lwpstatus_t) == ret);
printf("User CPU time: %ld\n", status.pr_utime.tv_sec);
printf("System time: %ld\n", status.pr_stime.tv_sec);
return 0;
}

这里是当前进程的第一个线程,但是只要您有足够的访问权限并且它们存在,就可以使用 PID 和 LWPID 的任何值。

这在我的 Solaris 测试机上运行正常(SunOS wiked 5.10 Generic_142900-13 sun4v sparc SUNW,T5140)。

我确实尝试在这个例子中使用 mmap,但从调用中返回了“操作不适用”,所以放弃并改用读取。

关于c++ - Solaris 10 x86 C++ 上的 GetThreadTimes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4033422/

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