60 |
|
proc_state_t *proc_state = NULL; |
61 |
|
proc_state_t *proc_state_ptr; |
62 |
|
int proc_state_size = 0; |
63 |
< |
#if defined(SOLARIS) |
63 |
> |
#if defined(SOLARIS) || defined(LINUX) |
64 |
|
DIR *proc_dir; |
65 |
|
struct dirent *dir_entry; |
66 |
|
char filename[MAX_FILE_LENGTH]; |
67 |
|
FILE *f; |
68 |
+ |
#ifdef SOLARIS |
69 |
|
psinfo_t process_info; |
70 |
+ |
#endif |
71 |
|
|
72 |
|
if((proc_dir=opendir(PROC_LOCATION))==NULL){ |
73 |
|
return NULL; |
76 |
|
while((dir_entry=readdir(proc_dir))!=NULL){ |
77 |
|
if(atoi(dir_entry->d_name) == 0) continue; |
78 |
|
|
79 |
+ |
#ifdef SOLARIS |
80 |
|
snprintf(filename, MAX_FILE_LENGTH, "/proc/%s/psinfo", dir_entry->d_name); |
81 |
< |
|
81 |
> |
#endif |
82 |
|
if((f=fopen(filename, "r"))==NULL){ |
83 |
|
/* Open failed.. Process since vanished, or the path was too long. |
84 |
|
* Ah well, move onwards to the next one */ |
85 |
|
continue; |
86 |
|
} |
87 |
+ |
#ifdef SOLARIS |
88 |
|
fread(&process_info, sizeof(psinfo_t), 1, f); |
89 |
|
|
90 |
|
proc_state = realloc(proc_state, (1+proc_state_size)*sizeof(proc_state_t)); |
87 |
– |
|
91 |
|
proc_state_ptr = proc_state+proc_state_size; |
92 |
|
|
93 |
|
proc_state_ptr->pid = process_info.pr_pid; |
103 |
|
proc_state_ptr->cpu_percent = (process_info.pr_pctcpu * 100.0) / 0x8000; |
104 |
|
proc_state_ptr->process_name = strdup(process_info.pr_fname); |
105 |
|
proc_state_ptr->proctitle = strdup(process_info.pr_psargs); |
106 |
+ |
|
107 |
+ |
if(process_info.pr_lwp.pr_state==1) proc_state_ptr->state = SLEEPING; |
108 |
+ |
if(process_info.pr_lwp.pr_state==2) proc_state_ptr->state = RUNNING; |
109 |
+ |
if(process_info.pr_lwp.pr_state==3) proc_state_ptr->state = ZOMBIE; |
110 |
+ |
if(process_info.pr_lwp.pr_state==4) proc_state_ptr->state = STOPPED; |
111 |
+ |
if(process_info.pr_lwp.pr_state==6) proc_state_ptr->state = RUNNING; |
112 |
+ |
#endif |
113 |
|
|
114 |
|
proc_state_size++; |
115 |
|
#endif |