this is how my program works:
1.) check config files which is placed folder(i.e httpd.conf, mysqld.conf).
2.) open each file and check the configuration(make checks if load is greater than the limit which the daemon will execute a command).
3.) check if service is running or not(check on the /proc/pid/status, opens all folder which is numeric).
4.) stop or start service (depends on what is configured inside the file).
5.) back to step 1.
now the problem is the daemon suddenly dies after a few minutes(30-50mins).
i think its in this function...
CODE
int is_up(char *svc)
{
DIR *dir_pn;
struct dirent *dir_entry_pn;
char _name[64], name[64], _state[64], stat[2], state[64], _sleepavg[64], sleepavg[64], _tgid[64], _pid[64], _ppid[64],_tracerpid[64],_uid[16],_gid[16];
char _fdsize[16],_groups[16],_vmpeak[16],_vmsize[16],_vmlck[16],_vmhwm[16];
char _vmrss[16], _vmdata[16], _vmstk[16],_vmexe[16],_vmlib[16],_vmpte[16];
char _stabrk[16],_brk[16],_stastk[16],_execlim[16],_threads[16],_sigq[16];
char _sigpnd[16],_shdpnd[16],_sigblk[16],_sigign[16],_sigcgt[16],_capinh[16];
char _capprm[16],_capeff[16],_cpus_allowed[16],_mems_allowed[16];
int tgid = 0, pid = 0, ppid = 0,tracerpid = 0,uid1 = 0,uid2 = 0,uid3 = 0,uid4 = 0;
int gid1 = 0,gid2 = 0,gid3 = 0,gid4 = 0,fdsize = 0,vmpeak = 0,vmsize = 0,vmlck = 0;
int vmhwm = 0,vmrss = 0,vmdata = 0,vmstk = 0,vmexe = 0,vmlib = 0,vmpte = 0;
int threads = 0,mems_allowed = 0;
char stastk[16],execlim[16],brk[16],stabrk[16],sigq[16],sigpnd[16],shdpnd[16],sigblk[
16],sigign[16],sigcgt[16],capinh[16];
char capprm[16],capeff[16],cpus_allowed[16];
char kb1[2],kb2[2],kb3[2],kb4[2],kb5[2],kb6[2],kb7[2],kb8[2],kb9[2],kb10[2],kb11[2],k
b12[2],kb13[2];
int ctr = 0;
char *svcstore;
dir_pn = opendir("/proc");
FILE *fp, *file;
while(NULL != (dir_entry_pn = readdir(dir_pn)))
{
char *newdir, *_newdir;
char dir[] = "/proc/";
char status[] = "/status";
if(isnum(dir_entry_pn->d_name) == 1)
{
newdir = strcat(dir, dir_entry_pn->d_name);
_newdir = strcat(newdir, status);
fp = fopen(_newdir, "r");
while(fscanf(fp, "%s %s\n%s %s %s\n%s %s\n%s %d\n%s %d\n%s %d\n%s %d\n%s %d %d %d %d\n%s %d %d %d %d\n%s %d\n%s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %s\n%s %d\n%s %s\n%s %s\n%s %s\n%s %s\n%s %s\n%s %s\n%s %s\n%s %s\n%s %s\n%s %d", &_name, &name, &_state, &stat, &state, &_sleepavg, &sleepavg, &_tgid, &tgid, &_pid, &pid, &_ppid, &ppid,&_tracerpid,&tracerpid,&_uid,&uid1,&uid2,&uid3,&uid4,&_gid,&gid1,&gid2,&gid3,&gid4,&_fdsize,&fdsize,&_groups,&_vmpeak,&vmpeak,&kb1,&_vmsize,&vmsize,&kb2,&_vmlck,&vmlck,&kb3,&_vmhwm,&vmhwm,&kb4,&_vmrss,&vmrss,&kb5,&_vmdata,&vmdata,&kb6,&_vmstk,&vmstk,&kb7,&_vmexe,&vmexe,&kb8,&_vmlib,&vmlib,&kb9,&_vmpte,&vmpte,&kb10,&_stabrk,&stabrk,&kb11,&_brk,&brk,&kb12,&_stastk,&stastk,&kb13,&_execlim,&execlim,&_threads,&threads,&_sigq,&sigq,&_sigpnd,&sigpnd,&_sigblk,&sigblk,&_sigign,&sigign,&_sigcgt,&sigcgt,&_capinh,&capinh,&_capprm,&capprm,&_capeff,&capeff,&_cpus_allowed,&cpus_allowed,&_mems_allowed,&mems_allowed)!= EOF)
{
if(strcmp(svc, name) == 0)
return(1);
}
fclose(fp);
}
}
closedir(dir_pn);
free(svc);
return(0);
}
{
DIR *dir_pn;
struct dirent *dir_entry_pn;
char _name[64], name[64], _state[64], stat[2], state[64], _sleepavg[64], sleepavg[64], _tgid[64], _pid[64], _ppid[64],_tracerpid[64],_uid[16],_gid[16];
char _fdsize[16],_groups[16],_vmpeak[16],_vmsize[16],_vmlck[16],_vmhwm[16];
char _vmrss[16], _vmdata[16], _vmstk[16],_vmexe[16],_vmlib[16],_vmpte[16];
char _stabrk[16],_brk[16],_stastk[16],_execlim[16],_threads[16],_sigq[16];
char _sigpnd[16],_shdpnd[16],_sigblk[16],_sigign[16],_sigcgt[16],_capinh[16];
char _capprm[16],_capeff[16],_cpus_allowed[16],_mems_allowed[16];
int tgid = 0, pid = 0, ppid = 0,tracerpid = 0,uid1 = 0,uid2 = 0,uid3 = 0,uid4 = 0;
int gid1 = 0,gid2 = 0,gid3 = 0,gid4 = 0,fdsize = 0,vmpeak = 0,vmsize = 0,vmlck = 0;
int vmhwm = 0,vmrss = 0,vmdata = 0,vmstk = 0,vmexe = 0,vmlib = 0,vmpte = 0;
int threads = 0,mems_allowed = 0;
char stastk[16],execlim[16],brk[16],stabrk[16],sigq[16],sigpnd[16],shdpnd[16],sigblk[
16],sigign[16],sigcgt[16],capinh[16];
char capprm[16],capeff[16],cpus_allowed[16];
char kb1[2],kb2[2],kb3[2],kb4[2],kb5[2],kb6[2],kb7[2],kb8[2],kb9[2],kb10[2],kb11[2],k
b12[2],kb13[2];
int ctr = 0;
char *svcstore;
dir_pn = opendir("/proc");
FILE *fp, *file;
while(NULL != (dir_entry_pn = readdir(dir_pn)))
{
char *newdir, *_newdir;
char dir[] = "/proc/";
char status[] = "/status";
if(isnum(dir_entry_pn->d_name) == 1)
{
newdir = strcat(dir, dir_entry_pn->d_name);
_newdir = strcat(newdir, status);
fp = fopen(_newdir, "r");
while(fscanf(fp, "%s %s\n%s %s %s\n%s %s\n%s %d\n%s %d\n%s %d\n%s %d\n%s %d %d %d %d\n%s %d %d %d %d\n%s %d\n%s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %d %s\n%s %s\n%s %d\n%s %s\n%s %s\n%s %s\n%s %s\n%s %s\n%s %s\n%s %s\n%s %s\n%s %s\n%s %d", &_name, &name, &_state, &stat, &state, &_sleepavg, &sleepavg, &_tgid, &tgid, &_pid, &pid, &_ppid, &ppid,&_tracerpid,&tracerpid,&_uid,&uid1,&uid2,&uid3,&uid4,&_gid,&gid1,&gid2,&gid3,&gid4,&_fdsize,&fdsize,&_groups,&_vmpeak,&vmpeak,&kb1,&_vmsize,&vmsize,&kb2,&_vmlck,&vmlck,&kb3,&_vmhwm,&vmhwm,&kb4,&_vmrss,&vmrss,&kb5,&_vmdata,&vmdata,&kb6,&_vmstk,&vmstk,&kb7,&_vmexe,&vmexe,&kb8,&_vmlib,&vmlib,&kb9,&_vmpte,&vmpte,&kb10,&_stabrk,&stabrk,&kb11,&_brk,&brk,&kb12,&_stastk,&stastk,&kb13,&_execlim,&execlim,&_threads,&threads,&_sigq,&sigq,&_sigpnd,&sigpnd,&_sigblk,&sigblk,&_sigign,&sigign,&_sigcgt,&sigcgt,&_capinh,&capinh,&_capprm,&capprm,&_capeff,&capeff,&_cpus_allowed,&cpus_allowed,&_mems_allowed,&mems_allowed)!= EOF)
{
if(strcmp(svc, name) == 0)
return(1);
}
fclose(fp);
}
}
closedir(dir_pn);
free(svc);
return(0);
}
what do you think can be the problem?

