* === acquire lock ===
* makes new listening socket
* makes first-instance socketpair
+ * makes watcher pipes
+ * forks watcher and awaits
* forks setup (script, sock fds indicated in env)
* fd0, fd1, fd2: from-outer
* other fd: call(client-end)(fake)
* reaps setup (and reports error)
* (implicitly releases lock)
*
+ * watcher fd[012]: watcher pipes
+ * starts watch on socket path
+ * sets stderr to line buffered
+ * sets stdin to nonblocking
+ * daemonises
+ * when socket stat changes, quit
+ *
* setup (pre-exec) fd0: null,
* fd[12]: fd2-from-outer
- * env fds: listener, call(server-end)(fake)
+ * env fds: listener, call(server-end)(fake),
+ * watcher read, watcher write
* close fd: lockfile
* possibly clean env, argv
*