美文网首页
获取进程启动时间

获取进程启动时间

作者: 蓝天白云_Sam | 来源:发表于2020-12-04 23:44 被阅读0次

详情请参考 iOS Application launch time on device
我们知道在调试的时候通过设置环境变量DYLD_PRINT_STATISTICS 可以在调试窗口输出main函数前的耗时.

image.png
有没有办法通过API获取呢?以下就是方案之一
#include "LaunchTimeMeasurer.h"
#include <sys/sysctl.h>;
#include <sys/unistd.h>;
double processUptime() {
    struct timeval currentTime; // 1
    struct kinfo_proc processInfo // 2;
    size_t processInfoSize = sizeof(processInfo) // 3;
    int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()}; // 4
    
    sysctl(mib, sizeof(mib)/sizeof(int), &processInfo, &processInfoSize, NULL, 0); // 5
    gettimeofday(&amp;currentTime, NULL); // 6
    
    return toSeconds(currentTime) - toSeconds(processInfo.kp_proc.p_starttime); // 7
}
double toSeconds(struct timeval time) {
    const int microsecondsInSecond = 1000000;
    return time.tv_sec + (double)time.tv_usec / microsecondsInSecond;
}
  • sysctl
  1. CTL_KERN — “high kernel”: proc, limits
  2. KERN_PROC — process entries
  3. KERN_PROC_PID — filter by id of process
  4. getpid() — id of current process
+ (BOOL)processInfoForPID:(int)pid procInfo:(struct kinfo_proc *)procInfo
{
    int cmd[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid};
    size_t size = sizeof(*procInfo);
    return sysctl(cmd, sizeof(cmd) / sizeof(*cmd), procInfo, &size, NULL, 0) == 0;
}

+ (NSTimeInterval)processStartTime
{
    struct kinfo_proc kProcInfo;
    if ([self processInfoForPID:getpid() procInfo:&kProcInfo]) {
        return kProcInfo.kp_proc.p_un.__p_starttime.tv_sec + kProcInfo.kp_proc.p_un.__p_starttime.tv_usec / 1000000.0;
    } else {
        NSAssert(NO, @"无法取得进程的信息");
        return 0;
    }
}

相关文章

  • Linux 常用命令二

    通过进程号获取进程启动路径 通过进程号获取进程启动路径 获取进程PID,然后进入/proc/进程PID ls -l...

  • 获取进程启动时间

    详情请参考 iOS Application launch time on device[https://mediu...

  • 【UiPath 技巧 06】UiPath 中启动进程、获取进程信

    问题 有时候我们需要启动进程、关闭进程、获取进程的信息 1. 启动进程 注意设置属性: 要点:FileName :...

  • 6.1创建进程6.2子进程 [编码问题]

    //创建进程,获取进行相关信息,获取启动参数 #include #include DWORD CreateChil...

  • Activity的启动模式(launchMode)、回退栈(ba

    进程、UI线程: 应用第一次启动时,会启动一个新的进程,该进程用应用的包名作为进程名(获取当前进程id的方法是:a...

  • APP专项测试-性能测试

    启动时间 冷启动 进程首次创建 热启动 进程通过点击Home键等进入后台,并未杀死再次启动; 启动时间脚本化 方法...

  • 有用的一些工具代码记录

    反射获取Context,包名 当前是否是主进程 启动Activity名称

  • windows渗透命令

    1. 获取操作系统信息 2.获取ARP缓存信息: 3. 查看服务进程id 4.查看服务、进程和启动程序信息: 这三...

  • PS命令参数

    显示其他用户启动的进程(a)查看系统中属于自己的进程(x)启动这个进程的用户和它启动的时间(u) 使用“date ...

  • 进程状态

    显示其他用户启动的进程(a) 查看系统中属于自己的进程(x) 启动这个进程的用户和它启动的时间(u) 使用“dat...

网友评论

      本文标题:获取进程启动时间

      本文链接:https://www.haomeiwen.com/subject/goswwktx.html