iOS - 事后获得自我进程的开始时间

时间:2016-11-17 08:30:44

标签: ios plugins process sandbox

我正在为iOS应用程序编写一个插件包(我将为您提供详细信息)。加载我的捆绑包时,主要应用程序包加载时不一定是这样,我希望得到"正常运行时间"以秒(或更高)分辨率的过程。

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

我可以使用一些标准的系统调用/ NSProcessInfo属性吗?

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

1 个答案:

答案 0 :(得分:4)

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

我实际上在OS上找到了另一个关于同一问题的答案,仅在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的资格,但这对我在模拟器和设备上都有效。试着提交并告诉我们?