iOS - 获取自身进程启动时间的时间戳

3

我正在为iOS应用程序编写插件包(细节不在此赘述)。当我的插件包被加载时(不一定是主应用程序包加载时),我想以秒(或更高)的分辨率获取进程的"正常运行时间"。

我知道在其他操作系统(Unix / Linux / Android)中,我可以枚举kinfo_proc 或使用/proc/self/stat方法,但我无法从iOS应用程序沙盒内实现我的目标。

是否有一些标准的syscall / NSProcessInfo 属性可供我使用?

这样做主要是为了调试,但未来也可能成为一个功能。因此,首选适合AppStore的方法,但不是强制的。


“我会为你节省细节”是什么意思?这是“打字错误”吗? - Ketan Parmar
抱歉,我本意是想“省略细节”… - Elist
1个回答

6
你可以使用[[NSProcessInfo processInfo] processIdentifier]来获取PID,然后使用sysctl来获取Unix启动时间。
实际上,我在SO上找到了另一个关于同样问题的答案,只是针对OSX:在Cocoa中获取应用程序运行时间的方法是否存在?
#include <sys/sysctl.h>
#include <sys/types.h>

pid_t pid = [[NSProcessInfo processInfo] processIdentifier];
int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, pid };
struct kinfo_proc proc;
size_t size = sizeof(proc);
sysctl(mib, 4, &proc, &size, NULL, 0);

NSDate *startTime = [NSDate dateWithTimeIntervalSince1970:proc.kp_proc.p_starttime.tv_sec];
NSLog(@"Process start time for PID:%d is %@", pid, startTime);

对于 App Store 的资格我不确定,但这对我在模拟器和设备上都有效。尝试提交并告诉我们结果如何?


谢谢,我会试一下的。 - Elist
1
从Xcode中运行完美,谢谢!我暂时不打算提交它,但是当我这样做时,我会通知你。 - Elist
@PhilippHofmann 最终我没有尝试将其放入AppStore中... - Elist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接