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.17 by tdb, Fri Jan 16 15:54:54 2004 UTC vs.
Revision 1.21 by ats, Sat Feb 14 16:43:55 2004 UTC

# Line 17 | Line 17
17   * License along with this library; if not, write to the Free Software
18   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19   * 02111-1307 USA
20 + *
21 + * $Id$
22   */
23  
24   #ifdef HAVE_CONFIG_H
# Line 45 | 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 70 | 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;
75 <        int procs;
79 >        int procs, i;
80   #endif
81  
82          process_stat.sleeping=0;
# Line 137 | 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 >                free(kp_stats);
161 >                return NULL;
162 >        }
163  
164 <        while(procs--){
164 >        for (i = 0; i < procs; i++) {
165   #ifdef FREEBSD5
166 <                if (kp_stats[procs].ki_stat == SSLEEP) process_stat.sleeping++;
149 <                if (kp_stats[procs].ki_stat == SWAIT) process_stat.sleeping++;
150 <                if (kp_stats[procs].ki_stat == SLOCK) process_stat.sleeping++;
151 <                if (kp_stats[procs].ki_stat == SRUN) process_stat.running++;
152 <                if (kp_stats[procs].ki_stat == SIDL) process_stat.running++;
153 <                if (kp_stats[procs].ki_stat == SZOMB) process_stat.zombie++;
154 <                if (kp_stats[procs].ki_stat == SSTOP) process_stat.stopped++;
155 <                
166 >                switch (kp_stats[i].ki_stat) {
167   #else
168 <                if (kp_stats[procs].kp_proc.p_stat == SSLEEP) process_stat.sleeping++;  
158 <                if (kp_stats[procs].kp_proc.p_stat == SRUN) process_stat.running++;
159 <                if (kp_stats[procs].kp_proc.p_stat == SIDL) process_stat.running++;
160 <                if (kp_stats[procs].kp_proc.p_stat == SZOMB) process_stat.zombie++;
161 <                if (kp_stats[procs].kp_proc.p_stat == SSTOP) process_stat.stopped++;
168 >                switch (kp_stats[i].kp_proc.p_stat) {
169   #endif
170 +                case SIDL:
171 +                case SRUN:
172 + #ifdef SONPROC
173 +                case SONPROC: /* NetBSD */
174 + #endif
175 +                        process_stat.running++;
176 +                        break;
177 +                case SSLEEP:
178 + #ifdef SWAIT
179 +                case SWAIT: /* FreeBSD 5 */
180 + #endif
181 + #ifdef SLOCK
182 +                case SLOCK: /* FreeBSD 5 */
183 + #endif
184 +                        process_stat.sleeping++;
185 +                        break;
186 +                case SSTOP:
187 +                        process_stat.stopped++;
188 +                        break;
189 +                case SZOMB:
190 + #ifdef SDEAD
191 +                case SDEAD: /* OpenBSD & NetBSD */
192 + #endif
193 +                        process_stat.zombie++;
194 +                        break;
195 +                }
196          }
197 +
198 +        free(kp_stats);
199   #endif
200  
201   #ifdef CYGWIN

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines