是否有可能获得PID的启动时间?

我有一个代码在这里漂浮了一段时间(代码正在为我工​​作):

- (NSArray *) runningProcesses { //CTL_KERN,KERN_PROC,KERN_PROC_ALL int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL ,0}; size_t miblen = 4; size_t size; int st = sysctl(mib, miblen, NULL, &size, NULL, 0); struct kinfo_proc * process = NULL; struct kinfo_proc * newprocess = NULL; do { size += size / 10; newprocess = realloc(process, size); if (!newprocess) { if (process) { free(process); process = NULL; } return nil; } process = newprocess; st = sysctl(mib, miblen, process, &size, NULL, 0); } while (st == -1 && errno == ENOMEM); if (st == 0) { if (size % sizeof(struct kinfo_proc) == 0) { int nprocess = size / sizeof(struct kinfo_proc); if (nprocess) { NSMutableArray * array = [[NSMutableArray alloc] init]; for (int i = nprocess - 1; i >= 0; i--) { NSString * processID = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_pid]; NSString * processName = [[NSString alloc] initWithFormat:@"%s", process[i].kp_proc.p_comm]; NSString * proc_CPU = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_estcpu]; double t = [[NSDate date] timeIntervalSince1970] - process[i].kp_proc.p_un.__p_starttime.tv_sec; NSString * proc_useTiem = [[NSString alloc] initWithFormat:@"%f",t]; // NSLog(@"process.kp_proc.p_stat = %c",process.kp_proc.p_stat); NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; [dic setValue:processID forKey:@"ProcessID"]; [dic setValue:processName forKey:@"ProcessName"]; [dic setValue:proc_CPU forKey:@"ProcessCPU"]; [dic setValue:proc_useTiem forKey:@"ProcessUseTime"]; [array addObject:dic]; } free(process); process = NULL; NSLog(@"runningProcesses is === %@",array); return array; } } } return nil; } 

我不是一个C语言开发人员,所以我试着读一些有关PID等问题,但是我还没有看到一种方法来知道PID第一次启动和上次使用的时间。

任何想法如何做到这一点?

它看起来像你想要的是:

 process[i].kp_proc.p_un.__p_starttime.tv_sec 

这样可以在几秒钟内为您提供过程生命周期,您可以从中计算出开始时间。

尽pipe如此,在不了解C的情况下使用这些代码并不会有什么乐趣。