<div dir="ltr"><div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jan 29, 2019 at 9:39 PM Axel Beckert <<a href="mailto:abe@debian.org" target="_blank">abe@debian.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Then I uninstalled not all of them at once but each of them one by<br>
one. And the one after whose purging<br>
<br>
# service udev restart<br>
# udevadm control --reload-rules<br>
<br>
didn't kill my processes anymore was cgroupfs-mount.<br>
<br>
So for some reason this killing only seems to happen on my box if<br>
cgroupfs-mount is installed. Then again, this is only necessary if<br>
systemd is not installed. </blockquote><div><br></div><div>Thanks everyone for the detailed debugging. This appears to be the culprit: udev tries to detect if running under systemd, and if so will kill its entire cgroup (to cleanup leftover processes). Looks like cgroupfs-mount is fooling udev into thinking it is running under systemd. </div><div><br></div><div>Could someone attach gdb to udev, break on the function `on_post`, trigger the bug, and report what does `manager->cgroup` contain?</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">But we also had reports where this happend<br>
with systemd, so this doesn't seem to be depend on the init system (at<br>
most at the init system's default features) and hence also the package<br>
cgroupfs-mount can't be held guilty for this.<br></blockquote><div><br></div><div>Can you point me at one? (sorry, I'm late to this bug and currently ENOTIME to read the entire backlog). It seems this should not happen on systemd systems, because systemd properly isolates udev to its own cgroup when starting.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Which IMHO again leaves either src:systemd or src:linux as rc-buggy<br>
package.<br></blockquote><div><br></div><div>I think something like this might be sufficient to work around the bug in sysvinit systems:</div><div><div><br></div><div>% git diff</div><div>diff --git a/src/udev/udevd.c b/src/udev/udevd.c</div><div>index fb8724ea87..a03b65a773 100644</div><div>--- a/src/udev/udevd.c</div><div>+++ b/src/udev/udevd.c</div><div>@@ -1814,7 +1814,7 @@ static int run(int argc, char *argv[]) {</div><div> </div><div>         dev_setup(NULL, UID_INVALID, GID_INVALID);</div><div> </div><div>-        if (getppid() == 1) {</div><div>+        if (getppid() == 1 && sd_booted()) {</div><div>                 /* get our own cgroup, we regularly kill everything udev has left behind</div><div>                    we only do this on systemd systems, and only if we are directly spawned</div><div>                    by PID1. otherwise we are not guaranteed to have a dedicated cgroup */</div></div><div><br></div><div> </div></div>-- <br><div dir="ltr" class="gmail-m_-6146879193236808186gmail_signature"><br>Saludos,<br>Felipe Sateler</div></div></div>