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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines