avoid /proc on freebsd for proc_time
This commit is contained in:
		
							parent
							
								
									c37991c69c
								
							
						
					
					
						commit
						5e065145e5
					
				@ -51,6 +51,7 @@
 | 
				
			|||||||
#define KI_DSZ  ki_dsize
 | 
					#define KI_DSZ  ki_dsize
 | 
				
			||||||
#define KI_SSZ  ki_ssize
 | 
					#define KI_SSZ  ki_ssize
 | 
				
			||||||
#define KI_FLAG ki_flag
 | 
					#define KI_FLAG ki_flag
 | 
				
			||||||
 | 
					#define KI_START ki_start
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define KI_PID  kp_proc.p_pid
 | 
					#define KI_PID  kp_proc.p_pid
 | 
				
			||||||
@ -69,6 +70,7 @@
 | 
				
			|||||||
#define KI_DSZ  kp_eproc.e_vm.vm_dsize
 | 
					#define KI_DSZ  kp_eproc.e_vm.vm_dsize
 | 
				
			||||||
#define KI_SSZ  kp_eproc.e_vm.vm_ssize
 | 
					#define KI_SSZ  kp_eproc.e_vm.vm_ssize
 | 
				
			||||||
#define KI_FLAG kp_eproc.e_flag
 | 
					#define KI_FLAG kp_eproc.e_flag
 | 
				
			||||||
 | 
					#define KI_START kp_proc.p_starttime
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef DARWIN
 | 
					#ifndef DARWIN
 | 
				
			||||||
@ -713,16 +715,12 @@ static int get_proc_times(sigar_pid_t pid, sigar_proc_time_t *time)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define READ_PROC_TIME(ptr, value) \
 | 
					#define tv2sec(tv) \
 | 
				
			||||||
    SIGAR_SKIP_SPACE(ptr); \
 | 
					   ((sigar_uint64_t)tv.tv_sec + (((sigar_uint64_t)tv.tv_usec) / 1000000))
 | 
				
			||||||
    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;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@ -730,27 +728,18 @@ int sigar_proc_time_get(sigar_t *sigar, sigar_pid_t pid,
 | 
				
			|||||||
        return status;
 | 
					        return status;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef DARWIN
 | 
				
			||||||
    if ((status = get_proc_times(pid, proctime)) != SIGAR_OK) {
 | 
					    if ((status = get_proc_times(pid, proctime)) != SIGAR_OK) {
 | 
				
			||||||
        return status;
 | 
					        return status;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    proctime->start_time = pinfo->kp_proc.p_starttime.tv_sec;
 | 
					 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    char buffer[1024], *ptr=buffer;
 | 
					    proctime->user  = tv2sec(pinfo->ki_rusage.ru_utime);
 | 
				
			||||||
    int status = SIGAR_PROC_FILE2STR(buffer, pid, "/status");
 | 
					    proctime->sys   = tv2sec(pinfo->ki_rusage.ru_stime);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (status != SIGAR_OK) {
 | 
					 | 
				
			||||||
        return PROCFS_STATUS(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;
 | 
					    proctime->total = proctime->user + proctime->sys;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    proctime->start_time = tv2sec(pinfo->KI_START);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return SIGAR_OK;
 | 
					    return SIGAR_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user