freebsd proc_time
This commit is contained in:
		
							parent
							
								
									a4a38b0725
								
							
						
					
					
						commit
						734e766771
					
				| @ -479,9 +479,9 @@ int sigar_proc_cred_get(sigar_t *sigar, sigar_pid_t pid, | |||||||
|     return SIGAR_OK; |     return SIGAR_OK; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #ifdef DARWIN | ||||||
| static int get_proc_times(sigar_pid_t pid, sigar_proc_time_t *time) | static int get_proc_times(sigar_pid_t pid, sigar_proc_time_t *time) | ||||||
| { | { | ||||||
| #ifdef DARWIN |  | ||||||
|     unsigned int count; |     unsigned int count; | ||||||
|     time_value_t utime = {0, 0}, stime = {0, 0}; |     time_value_t utime = {0, 0}, stime = {0, 0}; | ||||||
|     task_basic_info_data_t ti; |     task_basic_info_data_t ti; | ||||||
| @ -524,14 +524,19 @@ static int get_proc_times(sigar_pid_t pid, sigar_proc_time_t *time) | |||||||
|     time->total = time->user + time->sys; |     time->total = time->user + time->sys; | ||||||
| 
 | 
 | ||||||
|     return SIGAR_OK; |     return SIGAR_OK; | ||||||
| #else |  | ||||||
|     return SIGAR_ENOTIMPL; |  | ||||||
| #endif |  | ||||||
| } | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #define READ_PROC_TIME(ptr, value) \ | ||||||
|  |     SIGAR_SKIP_SPACE(ptr); \ | ||||||
|  |     value = sigar_strtoul(ptr); \ | ||||||
|  |     ++ptr; \ | ||||||
|  |     value += (sigar_strtoul(ptr) / 1000000) | ||||||
| 
 | 
 | ||||||
| int sigar_proc_time_get(sigar_t *sigar, sigar_pid_t pid, | int sigar_proc_time_get(sigar_t *sigar, sigar_pid_t pid, | ||||||
|                         sigar_proc_time_t *proctime) |                         sigar_proc_time_t *proctime) | ||||||
| { | { | ||||||
|  | #ifdef DARWIN | ||||||
|     int status = sigar_get_pinfo(sigar, pid); |     int status = sigar_get_pinfo(sigar, pid); | ||||||
|     struct kinfo_proc *pinfo = sigar->pinfo; |     struct kinfo_proc *pinfo = sigar->pinfo; | ||||||
|      |      | ||||||
| @ -543,10 +548,21 @@ int sigar_proc_time_get(sigar_t *sigar, sigar_pid_t pid, | |||||||
|         return status; |         return status; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| #ifdef DARWIN |  | ||||||
|     proctime->start_time = pinfo->kp_proc.p_starttime.tv_sec; |     proctime->start_time = pinfo->kp_proc.p_starttime.tv_sec; | ||||||
| #else | #else | ||||||
|     proctime->start_time = 1;/*XXX*/ |     char buffer[1024], *ptr=buffer; | ||||||
|  |     int status = SIGAR_PROC_FILE2STR(buffer, pid, "/status"); | ||||||
|  | 
 | ||||||
|  |     if (status != SIGAR_OK) { | ||||||
|  |         return status; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     ptr = sigar_skip_multiple_token(ptr, 7); | ||||||
|  |     READ_PROC_TIME(ptr, proctime->start_time); | ||||||
|  |     proctime->start_time *= 1000; /* convert to millis */ | ||||||
|  |     READ_PROC_TIME(ptr, proctime->user); | ||||||
|  |     READ_PROC_TIME(ptr, proctime->sys); | ||||||
|  |     proctime->total = proctime->user + proctime->sys; | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|     return SIGAR_OK; |     return SIGAR_OK; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Doug MacEachern
						Doug MacEachern