[00:17] oh, I see [00:18] it looks like we get the STOP of the child before the FORK of the parent [00:20] actually, that can't happen, we'd hit an assert [00:20] oh, no, we wouldn't [00:21] bah [00:50] - DEFAULT_RUNLEVEL="$(sed -n -e "/^id:[0-9]*:initdefault:/{s/^id://;s/:.*//;p}" /etc/inittab || true)" [00:50] + eval "$(sed -nre 's/^id:([0-9sS])[0-9sS]*:initdefault:.*/DEFAULT_RUNLEVEL="\1";/p' /etc/inittab || true)" [00:51] Didn’t test that on a live system yet, though. [00:51] what's the difference? [00:52] Originally, it would do DEFAULT_RUNLEVEL="" if inittab exists but id:... wasn’t set. Also, if there’s a broken inittab with multiple initdefault lines, or even multiple runlevels on a single line, DEFAULT_RUNLEVEL would get them all. [00:52] oh [00:52] well, sysvinit would have failed to boot then ;) [00:53] yours would fail if inittab had a " in it ;) [00:53] Heh, true [00:53] Oh, wait. It wouldn’t. [00:53] and fail at "eval" [00:53] rather than in the || true [00:54] oh [00:54] The expression would print nothing if there was a line id:":initdefault: [00:54] ok true [01:07] Oh, btw, set -e; eval "$(false)"; echo foo prints foo at least with dash, zsh and bash. Didn’t bother to read what POSIX says. The getopt(1) documentation explicitly tells you to do temp="$(getopt ...)"; eval "$temp" so that getopt interacts with set -e as expected. [01:08] eval set -- "$temp" even [19:05] Sorry to join and pounce, but I just had a question I was wondering about: is there any support in upstart for monitoring multiple child processes? I've found "expect fork" and "expect daemon", which seem to monitor a single child or grandchild, but what if there are several child processes, and if any of them fail then I want to take action? [19:32] What’s wrong with joining and pouncing? [19:32] 0.10 should have better support for following child processes, but that’s about as much as i know, Keybuk should be able to elaborate.