Add 'daemonize': a program that spawns a process and waits for an event
authorDan Cross <crossd@gmail.com>
Thu, 6 Oct 2016 19:25:09 +0000 (15:25 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 6 Oct 2016 19:39:23 +0000 (15:39 -0400)
commit15fbdbff09b9be71992636c31fbaf48d0f77ce1f
tree5ff6558ae5d8d61eca758cc28d68cb88d50ed172
parent216b406e8bf6692b3efcc9b2113d5019776a7178
Add 'daemonize': a program that spawns a process and waits for an event

Consider the typical 'fork-without-exec' pattern: often, a program
wants to do some initialization, acquire some resources, etc, and
then background itself by forking and exiting in the parent.  We
don't have great support for this, as e.g. reference counts on resources
created by the parent can keep processes alive when they should die.
(cf, `ipconfig` currently, where we acquire a DHCP lease in the
foreground before going into a loop in the background to maintain
the lease, but the parent process stays in the "DYING" state forever.)

Barret and I discussed this at length.  A possible solution is to have
a program that invokes the target process in the background and then
waits for an event from that process and then itself exits.  Note that
this requires a protocol between the two: any place where we exit in
the child needs to send an event, and the parent needs to get an event
or it blocks.

I think a generalization of 'wait' where we can send arbitrary messages
with payloads, more along the lines of our existing event support but
specialized to process control, would be nice but it's more work than
what we've got right now.  Think of something analogous to 'wait' but
that accepts a payload, paired with a 'background' call of some kind
that signals to a possibly-waiting parent that we're going off on our
own.

Change-Id: I531f1be3076786a638d57db1c660f9b768f5545e
Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
tests/daemonize.c [new file with mode: 0644]