From 0a64de9b4f7b3254008affe21b3ad4174c26f7f5 Mon Sep 17 00:00:00 2001 From: Erik Andersen Date: Tue, 18 Apr 2000 20:00:03 +0000 Subject: More little stuff. -Erik --- Makefile | 2 +- kill.c | 5 ++++- procps/kill.c | 5 ++++- utility.c | 30 +++++++++++++++++++++++++----- 4 files changed, 34 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 30fd718..5d246f1 100644 --- a/Makefile +++ b/Makefile @@ -26,7 +26,7 @@ export VERSION # Set the following to `true' to make a debuggable build. # Leave this set to `false' for production use. # eg: `make DODEBUG=true tests' -DODEBUG = false +DODEBUG = true # If you want a static binary, turn this on. DOSTATIC = false diff --git a/kill.c b/kill.c index db48424..93f02ea 100644 --- a/kill.c +++ b/kill.c @@ -222,12 +222,15 @@ extern int kill_main(int argc, char **argv) } #ifdef BB_KILLALL else { + pid_t myPid=getpid(); /* Looks like they want to do a killall. Do that */ while (--argc >= 0) { pid_t* pidList; pidList = findPidByName( *argv); - for(; pidList && pidList!=0; pidList++) { + for(; pidList && *pidList!=0; pidList++) { + if (*pidList==myPid) + continue; if (kill(*pidList, sig) != 0) fatalError( "Could not kill pid '%d': %s\n", *pidList, strerror(errno)); } diff --git a/procps/kill.c b/procps/kill.c index db48424..93f02ea 100644 --- a/procps/kill.c +++ b/procps/kill.c @@ -222,12 +222,15 @@ extern int kill_main(int argc, char **argv) } #ifdef BB_KILLALL else { + pid_t myPid=getpid(); /* Looks like they want to do a killall. Do that */ while (--argc >= 0) { pid_t* pidList; pidList = findPidByName( *argv); - for(; pidList && pidList!=0; pidList++) { + for(; pidList && *pidList!=0; pidList++) { + if (*pidList==myPid) + continue; if (kill(*pidList, sig) != 0) fatalError( "Could not kill pid '%d': %s\n", *pidList, strerror(errno)); } diff --git a/utility.c b/utility.c index b844c3b..29934cd 100644 --- a/utility.c +++ b/utility.c @@ -1291,12 +1291,21 @@ extern pid_t* findPidByName( char* pidName) /* Now search for a match */ for (i=1; id_name)) @@ -1358,15 +1368,25 @@ extern pid_t* findPidByName( char* pidName) fgets(buffer, 256, status); fclose(status); - if (((p=strstr(buffer, pidName)) != NULL) - && (strncmp(p, pidName, strlen(pidName)) != 0)) { + /* Make sure we only match on the process name */ + p=buffer+5; /* Skip the name */ + while ((p)++) { + if (*p==0 || *p=='\n') { + *p='\0'; + break; + } + } + p=buffer+6; /* Skip the "Name:\t" */ + + if (((q=strstr(q, pidName)) != NULL) + && (strncmp(q, pidName, strlen(pidName)) != 0)) { pidList=realloc( pidList, sizeof(pid_t) * (i+2)); if (pidList==NULL) fatalError("out of memory\n"); pidList[i++]=strtol(next->d_name, NULL, 0); } } - if (pidList!=NULL) + if (pidList) pidList[i]=0; return pidList; } -- cgit v1.1