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.75 by ats, Fri Sep 10 15:15:00 2004 UTC vs.
Revision 1.77 by ats, Sat Nov 6 15:10:07 2004 UTC

# Line 72 | Line 72
72   #include <sys/lwp.h>
73   #endif
74   #endif
75 + #ifdef HPUX
76 + #include <sys/param.h>
77 + #include <sys/pstat.h>
78 + #include <unistd.h>
79 + #define PROCESS_BATCH 30
80 + #endif
81  
82   static void proc_state_init(sg_process_stats *s) {
83          s->process_name = NULL;
# Line 88 | Line 94 | sg_process_stats *sg_get_process_stats(int *entries){
94                                proc_state_init, proc_state_destroy);
95          int proc_state_size = 0;
96          sg_process_stats *proc_state_ptr;
97 + #ifdef HPUX
98 +        struct pst_status pstat_procinfo[PROCESS_BATCH];
99 +        long procidx = 0;
100 +        long long pagesize;
101 +        int num, i;
102 + #endif
103   #ifdef ALLBSD
104          int mib[4];
105          size_t size;
# Line 665 | Line 677 | sg_process_stats *sg_get_process_stats(int *entries){
677          }
678  
679          free(kp_stats);
680 + #endif
681 +
682 + #ifdef HPUX
683 +        if ((pagesize = sysconf(_SC_PAGESIZE)) == -1) {
684 +                sg_set_error_with_errno(SG_ERROR_SYSCONF, "_SC_PAGESIZE");
685 +                return NULL;
686 +        }
687 +
688 +        do {
689 +                num = pstat_getproc(pstat_procinfo, sizeof pstat_procinfo[0],
690 +                                    PROCESS_BATCH, procidx);
691 +
692 +                for (i = 0; i < num; i++) {
693 +                        struct pst_status *pi = &pstat_procinfo[i];
694 +
695 +                        if (VECTOR_RESIZE(proc_state, proc_state_size + 1) < 0) {
696 +                                return NULL;
697 +                        }
698 +                        proc_state_ptr = proc_state+proc_state_size;
699 +        
700 +                        proc_state_ptr->pid = pi->pst_pid;
701 +                        proc_state_ptr->parent = pi->pst_ppid;
702 +                        proc_state_ptr->pgid = pi->pst_pgrp;
703 +                        proc_state_ptr->uid = pi->pst_uid;
704 +                        proc_state_ptr->euid = pi->pst_euid;
705 +                        proc_state_ptr->gid = pi->pst_gid;
706 +                        proc_state_ptr->egid = pi->pst_egid;
707 +                        proc_state_ptr->proc_size = (pi->pst_dsize + pi->pst_tsize + pi->pst_ssize) * pagesize;
708 +                        proc_state_ptr->proc_resident = pi->pst_rssize * pagesize;
709 +                        proc_state_ptr->time_spent = pi->pst_time;
710 +                        proc_state_ptr->cpu_percent = (pi->pst_pctcpu * 100.0) / 0x8000;
711 +                        proc_state_ptr->nice = pi->pst_nice;
712 +        
713 +                        if (sg_update_string(&proc_state_ptr->process_name,
714 +                                             pi->pst_ucomm) < 0) {
715 +                                return NULL;
716 +                        }
717 +                        if (sg_update_string(&proc_state_ptr->proctitle,
718 +                                             pi->pst_cmd) < 0) {
719 +                                return NULL;
720 +                        }
721 +        
722 +                        switch (pi->pst_stat) {
723 +                        case PS_SLEEP:
724 +                                proc_state_ptr->state = SG_PROCESS_STATE_SLEEPING;
725 +                                break;
726 +                        case PS_RUN:
727 +                                proc_state_ptr->state = SG_PROCESS_STATE_RUNNING;
728 +                                break;
729 +                        case PS_STOP:
730 +                                proc_state_ptr->state = SG_PROCESS_STATE_STOPPED;
731 +                                break;
732 +                        case PS_ZOMBIE:
733 +                                proc_state_ptr->state = SG_PROCESS_STATE_ZOMBIE;
734 +                                break;
735 +                        case PS_IDLE:
736 +                        case PS_OTHER:
737 +                                proc_state_ptr->state = SG_PROCESS_STATE_UNKNOWN;
738 +                                break;
739 +                        }
740 +        
741 +                        proc_state_size++;
742 +                }
743 +                procidx = pstat_procinfo[n - 1].pst_idx + 1;
744 +        } while (num > 0);
745   #endif
746  
747   #ifdef CYGWIN

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines