44 |
static sigjmp_buf timeout; |
static sigjmp_buf timeout; |
45 |
|
|
46 |
/* Private Prototypes */ |
/* Private Prototypes */ |
47 |
static void do_validate(Process_T); |
static void do_validate(Process_T, ProcessTree_T *, int); |
48 |
static void do_restart(Process_T, char *, ...) ; |
static void do_restart(Process_T, char *, ...) ; |
49 |
static void do_start(Process_T, char *, ...) ; |
static void do_start(Process_T, char *, ...) ; |
50 |
static void do_stop(Process_T, char *, ...); |
static void do_stop(Process_T, char *, ...); |
90 |
void validate() { |
void validate() { |
91 |
|
|
92 |
Process_T p; |
Process_T p; |
93 |
|
ProcessTree_T * pt; |
94 |
|
int treesize = 0; |
95 |
|
|
96 |
|
if (Run.doprocess) { |
97 |
|
|
98 |
|
treesize = initprocesstree(&pt); |
99 |
|
|
100 |
|
} |
101 |
|
|
102 |
if(! update_loadavg()) { |
if(! update_loadavg()) { |
103 |
|
|
108 |
for(p= processlist; p; p= p->next) { |
for(p= processlist; p; p= p->next) { |
109 |
if(p->visited) |
if(p->visited) |
110 |
continue; |
continue; |
111 |
do_validate(p); |
do_validate(p, pt, treesize); |
112 |
} |
} |
113 |
|
|
114 |
reset_depend(); |
reset_depend(); |
115 |
|
|
116 |
|
if (Run.doprocess) { |
117 |
|
|
118 |
|
delprocesstree(pt, treesize); |
119 |
|
|
120 |
|
} |
121 |
|
|
122 |
} |
} |
123 |
|
|
124 |
|
|
133 |
* |
* |
134 |
* We block for the signals SIGTERM while in this function. |
* We block for the signals SIGTERM while in this function. |
135 |
*/ |
*/ |
136 |
static void do_validate(Process_T p) { |
static void do_validate(Process_T p, ProcessTree_T * pt, int treesize) { |
137 |
|
|
138 |
Port_T pp; |
Port_T pp; |
139 |
Resource_T pr; |
Resource_T pr; |
180 |
|
|
181 |
if(Run.doprocess) { |
if(Run.doprocess) { |
182 |
|
|
183 |
if(update_process_data(p, pid)) { |
if(update_process_data(p, pt, treesize, pid)) { |
184 |
|
|
185 |
if(! check_process_state(p, report)) { |
if(! check_process_state(p, report)) { |
186 |
|
|
765 |
|
|
766 |
} |
} |
767 |
} |
} |
768 |
|
break; |
769 |
|
|
770 |
|
case RESOURCE_ID_CHILDREN: |
771 |
|
|
772 |
|
if(compare_value(pr->operator, pi->children, pr->limit)) { |
773 |
|
|
774 |
|
vlog(report, STRLEN, p, |
775 |
|
"children of %i matches resource limit " |
776 |
|
"[children%s%i]", |
777 |
|
pi->children, operatorshortnames[pr->operator], |
778 |
|
pr->limit); |
779 |
|
|
780 |
|
okay= FALSE; |
781 |
|
|
782 |
|
} else { |
783 |
|
|
784 |
|
if(Run.debug) { |
785 |
|
|
786 |
|
log("'%s' children check passed " |
787 |
|
"[current children=%i]\n", |
788 |
|
p->name, pi->children); |
789 |
|
|
790 |
|
} |
791 |
|
} |
792 |
|
break; |
793 |
|
|
794 |
|
case RESOURCE_ID_TOTAL_MEM_KBYTE: |
795 |
|
|
796 |
|
if(compare_value(pr->operator, pi->total_mem_kbyte, pr->limit)) { |
797 |
|
|
798 |
|
vlog(report, STRLEN, p, |
799 |
|
"total mem amount of %ldkB matches resource limit" |
800 |
|
" [total mem amount%s%ldkB]", |
801 |
|
pi->total_mem_kbyte, operatorshortnames[pr->operator], |
802 |
|
pr->limit); |
803 |
|
|
804 |
|
okay= FALSE; |
805 |
|
|
806 |
|
} else { |
807 |
|
|
808 |
|
if(Run.debug) { |
809 |
|
|
810 |
|
log("'%s' total mem amount check passed" |
811 |
|
" [current total mem amount=%ldkB]\n", |
812 |
|
p->name, pi->total_mem_kbyte); |
813 |
|
|
814 |
|
} |
815 |
|
} |
816 |
break; |
break; |
817 |
|
|
818 |
default: |
default: |