iOS - 事后获取自身进程启动时间

iOS - get self process start time after the fact

我正在为 iOS 应用程序编写一个插件包(我不会告诉你细节)。当我的包被加载时,这不一定是在主应用程序包加载时,我想以秒(或更高)的分辨率获得进程的 "Uptime"。

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

是否有一些标准的系统调用/NSProcessInfo 属性 我可以使用它?

这主要是为了调试,但它可能会变成一个功能。因此,首选符合 AppStore 条件的方法,但不是强制性的。

您可以使用[[NSProcessInfo processInfo] processIdentifier]获取PID,然后sysctl获取unix启动时间。

实际上我在 SO 上找到了相同问题的另一个答案,就在 OSX 上:Is there any way to get the application's run time in Cocoa for OS X?

#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 资格,但这对我在模拟器和设备上都有效。尝试提交并让我们知道?