1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
int process_exit(char *name) { DIR *dir; struct dirent *entry; int n; char *p; char buf[1024]; char cmdline[64]; FILE *fp; int pid; dir = opendir("/proc"); if(!dir) return 0; for(;;) { //get entry from dir /proc if((entry = readdir(dir)) == NULL) { closedir(dir); return 0; } p = entry->d_name; //process must have pid as its dir name if(!(*p >= '0' && *p<= '9')) { continue; } pid = atoi(p); //get cmdline sprintf(cmdline,"/proc/%d/cmdline",pid); if((fp=fopen(cmdline,"r")) == NULL) { continue; } buf[0] = '\0'; if((n=fread(buf,1,sizeof(buf)-1,fp)) > 0) { if(buf[n-1] == '\n') { buf[--n] = 0; } p = buf; while(n) { //get process name if(((unsigned char)*p) == ' ') break; p++; n--; } *p = '\0'; } fclose(fp); if(strstr(buf,name)) { closedir(dir); return 1; } } closedir(dir); return 0; } |