ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/libstatgrab/src/libstatgrab/process_stats.c
(Generate patch)

Comparing projects/libstatgrab/src/libstatgrab/process_stats.c (file contents):
Revision 1.18 by tdb, Mon Jan 19 16:49:21 2004 UTC vs.
Revision 1.19 by tdb, Sat Feb 14 02:56:11 2004 UTC

# Line 47 | Line 47
47   #define MAX_FILE_LENGTH PATH_MAX
48   #endif
49   #ifdef ALLBSD
50 < #include <kvm.h>
50 > #include <stdlib.h>
51   #include <sys/param.h>
52   #include <sys/sysctl.h>
53 + #include <sys/proc.h>
54   #endif
55   #ifdef FREEBSD
56   #include <sys/user.h>
# Line 72 | Line 73 | process_stat_t *get_process_stats(){
73          psinfo_t process_info;
74   #endif
75   #ifdef ALLBSD
76 +        int mib[3];
77 +        size_t size;
78          struct kinfo_proc *kp_stats;    
79 <        kvm_t *kvmd;
77 <        int procs;
79 >        int procs, i;
80   #endif
81  
82          process_stat.sleeping=0;
# Line 139 | Line 141 | process_stat_t *get_process_stats(){
141          closedir(proc_dir);
142   #endif
143   #ifdef ALLBSD
144 <        if((kvmd = get_kvm()) == NULL){
144 >        mib[0] = CTL_KERN;
145 >        mib[1] = KERN_PROC;
146 >        mib[2] = KERN_PROC_ALL;
147 >
148 >        if (sysctl(mib, 3, NULL, &size, NULL, 0) < 0) {
149                  return NULL;
150          }
151 +        
152 +        procs = size / sizeof(struct kinfo_proc);
153  
154 <        kp_stats=kvm_getprocs(kvmd, KERN_PROC_ALL, 0, &procs);
154 >        kp_stats = malloc(size);
155 >        if (kp_stats == NULL) {
156 >                return NULL;
157 >        }
158 >        
159 >        if (sysctl(mib, 3, kp_stats, &size, NULL, 0) < 0) {
160 >                return NULL;
161 >        }
162  
163 <        while(procs--){
163 >        for (i = 0; i < procs; i++) {
164   #ifdef FREEBSD5
165 <                if (kp_stats[procs].ki_stat == SSLEEP) process_stat.sleeping++;
151 <                if (kp_stats[procs].ki_stat == SWAIT) process_stat.sleeping++;
152 <                if (kp_stats[procs].ki_stat == SLOCK) process_stat.sleeping++;
153 <                if (kp_stats[procs].ki_stat == SRUN) process_stat.running++;
154 <                if (kp_stats[procs].ki_stat == SIDL) process_stat.running++;
155 <                if (kp_stats[procs].ki_stat == SZOMB) process_stat.zombie++;
156 <                if (kp_stats[procs].ki_stat == SSTOP) process_stat.stopped++;
157 <                
165 >                switch (kp_stats[i].ki_stat) {
166   #else
167 <                if (kp_stats[procs].kp_proc.p_stat == SSLEEP) process_stat.sleeping++;  
160 <                if (kp_stats[procs].kp_proc.p_stat == SRUN) process_stat.running++;
161 <                if (kp_stats[procs].kp_proc.p_stat == SIDL) process_stat.running++;
162 <                if (kp_stats[procs].kp_proc.p_stat == SZOMB) process_stat.zombie++;
163 <                if (kp_stats[procs].kp_proc.p_stat == SSTOP) process_stat.stopped++;
167 >                switch (kp_stats[i].kp_proc.p_stat) {
168   #endif
169 +                case SSLEEP:
170 +                        process_stat.sleeping++;
171 +                        break;
172 +                case SRUN:
173 +                case SIDL:
174 +                        process_stat.running++;
175 +                        break;
176 +                case SZOMB:
177 +                /*case SDEAD:*/
178 +                        process_stat.zombie++;
179 +                        break;
180 +                case SSTOP:
181 +                        process_stat.stopped++;
182 +                        break;
183 +                }
184          }
185   #endif
186 +
187 + free(kp_stats);
188  
189   #ifdef CYGWIN
190          return NULL;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines