From 99a0a2583fb89642e938047cc4331a89d23d18e9 Mon Sep 17 00:00:00 2001 From: Werner Fink Date: Fri, 16 Mar 2012 16:46:06 +0000 Subject: [PATCH] * Handle deleted binaries in pidof (was local bug #34992) --- doc/Changelog | 1 + src/killall5.c | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index d50f39d..5bc45e8 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ sysvinit (2.89dsf) UNRELEASED; urgency=low [ Werner Fink ] + * Handle deleted binaries in pidof (was local bug #34992) * Allow init to delte extra environment variables (was local bug #35858) * Avoid that init double environment variables for its childs diff --git a/src/killall5.c b/src/killall5.c index 7d42ecc..853acb2 100644 --- a/src/killall5.c +++ b/src/killall5.c @@ -638,8 +638,32 @@ int readproc(int do_stat) if ((p->nfs = check4nfs(path, buf))) goto link; case DO_STAT: - if (stat(path, &st) != 0) + if (stat(path, &st) != 0) { + char * ptr; + + len = readlink(path, buf, PATH_MAX); + if (len <= 0) + break; + buf[len] = '\0'; + + ptr = strstr(buf, " (deleted)"); + if (!ptr) + break; + *ptr = '\0'; + len -= strlen(" (deleted)"); + + if (stat(buf, &st) != 0) + break; + p->dev = st.st_dev; + p->ino = st.st_ino; + p->pathname = (char *)xmalloc(len + 1); + memcpy(p->pathname, buf, len); + p->pathname[len] = '\0'; + + /* All done */ break; + } + p->dev = st.st_dev; p->ino = st.st_ino;