2013-05-03 41 views
2

我有一个漂浮在这里一段时间(代码为我工作)代码:是否可以获得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第一次启动和上次使用的时间。

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

回答

6

它看起来像你想要的是:

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

这使你在几秒钟的过程一辈子的日期,你可以从制定开始时间。尽管如此,在不知道C的情况下用这段代码搞乱它并不会有任何乐趣。

+0

好的,谢谢领先! – 2013-05-03 20:43:37

相关问题