Guys,

No-one ever responded to this thread (years ago).
We have just noticed the same problem on a newer version of Debian and we
are going to dig up our old patch and use it.
This is an issue for services like rpcbind for which systemd uses the older
SysV init scripts.

Dan


On Sat, Aug 10, 2013 at 2:11 PM, Daniel Povey <dpo...@gmail.com> wrote:

> I am sending a patch to the source of "killall5" that I am using
> locally.  It basically ignores all processes in a "D" or "Z" state (or
> states where D or Z appear in the string).  This is of course not
> ideal, but it works for me.  I found that not all machines where I had
> stuck processes, would cause problems for start-stop-daemon-- this
> patch is only for "pidof".  I may later replicate the problem with
> start-stop-daemon and figure out a fix.
>
>
> root@a04:~# diff -c sysvinit-2.88dsf/src/killall5.c
> sysvinit-2.88dsf-modified/src/killall5.c
> *** sysvinit-2.88dsf/src/killall5.c     Sat Aug 10 17:05:31 2013
> --- sysvinit-2.88dsf-modified/src/killall5.c    Sat Aug 10 16:50:27 2013
> ***************
> *** 1,5 ****
>   /*
> !  * kilall5.c  Kill all processes except processes that have the
>    *            same session id, so that the shell that called us
>    *            won't be killed. Typically used in shutdown scripts.
>    *
> --- 1,5 ----
>   /*
> !  * killall5.c Kill all processes except processes that have the
>    *            same session id, so that the shell that called us
>    *            won't be killed. Typically used in shutdown scripts.
>    *
> ***************
> *** 536,548 ****
>                         p->statname = (char *)xmalloc(strlen(s)+1);
>                         strcpy(p->statname, s);
>
>                         /* Get session, startcode, endcode. */
>                         startcode = endcode = 0;
> !                       if (sscanf(q,   "%*c %*d %*d %d %*d %*d %*u %*u "
>                                         "%*u %*u %*u %*u %*u %*d %*d "
>                                         "%*d %*d %*d %*d %*u %*u %*d "
>                                         "%*u %lu %lu",
> !                                       &p->sid, &startcode, &endcode) !=
> 3) {
>                                 p->sid = 0;
>                                 nsyslog(LOG_ERR, "can't read sid from
> %s\n",
>                                         path);
> --- 536,550 ----
>                         p->statname = (char *)xmalloc(strlen(s)+1);
>                         strcpy(p->statname, s);
>
> +                       char status[11];
> +
>                         /* Get session, startcode, endcode. */
>                         startcode = endcode = 0;
> !                       if (sscanf(q,   "%10s %*d %*d %d %*d %*d %*u %*u "
>                                         "%*u %*u %*u %*u %*u %*d %*d "
>                                         "%*d %*d %*d %*d %*u %*u %*d "
>                                         "%*u %lu %lu",
> !                                       status, &p->sid, &startcode,
> &endcode) != 4) {
>                                 p->sid = 0;
>                                 nsyslog(LOG_ERR, "can't read sid from
> %s\n",
>                                         path);
> ***************
> *** 555,560 ****
> --- 557,571 ----
>                         if (startcode == 0 && endcode == 0)
>                                 p->kernel = 1;
>                         fclose(fp);
> +                       if (strchr(status, 'D') != NULL ||
> strchr(status, 'Z') != NULL) {
> +                         /* Ignore zombie processes or processes in
> disk sleep, as attempts
> +                            to access the stats of these will
> sometimes fail. */
> +                         if (p->argv0) free(p->argv0);
> +                         if (p->argv1) free(p->argv1);
> +                         if (p->statname) free(p->statname);
> +                         free(p);
> +                         continue;
> +                       }
>                 } else {
>                         /* Process disappeared.. */
>                         if (p->argv0) free(p->argv0);
>
>
>
>
> On Fri, Aug 9, 2013 at 7:33 PM, Debian Bug Tracking System
> <ow...@bugs.debian.org> wrote:
> > Thank you for filing a new Bug report with Debian.
> >
> > This is an automatically generated reply to let you know your message
> > has been received.
> >
> > Your message is being forwarded to the package maintainers and other
> > interested parties for their attention; they will reply in due course.
> >
> > Your message has been sent to the package maintainer(s):
> >  Debian sysvinit maintainers <pkg-sysvinit-de...@lists.alioth.debian.org
> >
> >
> > If you wish to submit further information on this problem, please
> > send it to 719...@bugs.debian.org.
> >
> > Please do not send mail to ow...@bugs.debian.org unless you wish
> > to report a problem with the Bug-tracking system.
> >
> > --
> > 719273: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=719273
> > Debian Bug Tracking System
> > Contact ow...@bugs.debian.org with problems
>

Reply via email to