--- sysvinit-2.86/src/killall5.c 2004-07-30 14:16:23.000000000 +0200 +++ b/src/killall5.c 2008-05-29 21:41:09.000000000 +0200 @@ -553,13 +553,28 @@ return(first ? 1 : 0); } +pid_t getoid() +{ + PIDQ_HEAD *q; + char *s; + + s = getenv("KILLALL5_OMITPID"); + + if (s == NULL) + return getpid(); + + if (((q = pidof(s)) != NULL) && !empty_q(q)) + return q->head->proc->pid; + + return getpid(); +} /* Main for either killall or pidof. */ int main(int argc, char **argv) { PROC *p; - int pid, sid = -1; + int pid, oid = 0, sid = -1; int sig = SIGKILL; /* Get program name. */ @@ -608,8 +623,9 @@ /* Now kill all processes except our session. */ sid = (int)getsid(0); pid = (int)getpid(); + oid = (int)getoid(); for (p = plist; p; p = p->next) - if (p->pid != pid && p->sid != sid && !p->kernel) + if (p->pid != oid && p->pid != pid && p->sid != sid && !p->kernel) kill(p->pid, sig); /* And let them continue. */