*
* setup (script) runs initialisation parts of the script
* at prefork establishment point:
- * forks to logger(1)
- * forks for server, now becomes like monitor below
- * exits
+ * setup (pm) [1] opens syslog
+ * forks for server
+ * [2] exits
*
- * server (script) fd0: null, fd[12]: syslog
- * other fds: orig-fd[01], listener,
- * other fds: call(server-end)(fake)
- *
- * right away, forks one fake-accepted monitor:
- * f-a monitor [fd0: null, fd[12]: syslgo]
- * other fds: call(server-end)(fake)
- * runs as monitor, below
- *
- * [server (script)] fd0: null, fd[12]: syslog
- * other fds: listener
- * closes fds: orig-fd[01], call(server-end)fake)
+ # server (pm) [1] [fd0: null],
+ * [fd[12: fd2-from-outer-caller]
+ * right away, forks one fa-monitor
+ * [2] closes outer caller fds and call(fake)
+ * [server (pm)] fd[012]: null
+ * other fds: listener, syslog
* runs in loop accepting and forking,
- * reaping and limiting children
+ * reaping and limiting children (incl fa-monitor)
* reports failures of monitors to syslog
+ *
+ * f-a monitor forks executor
+ * closes fd: listener
+ * [fd[12: fd2-from-outer-caller]
+ * [other fds: call(server-end)(fake), syslog]
+ * runs as monitor, below
+ *
*
* [client (C wrapper)] if client connect succeeds:
* now fd: call(client-end)
*
* [server (script)] accepts, forks monitor
*
- * monitor [fd0: null, fd[12]: syslgo]
- * other fds: call(server-end)
+ * monitor [fd[012]: null]
+ * other fds: syslog, call(server-end)
* sends ack byte
* receives args, env, fds
* forks executor
* runs main part of script
* exits normally
*
- * [monitor] [fd0: null, fd[12]: syslgo]
- * [other fds: call(server-end)]
+ * [monitor] [fd[012]: null]
+ * [other fds: call(server-end), syslog]
* reaps executor
* reports status via socket
*
if (dup2(null_0, 0)) diee("dup2 /dev/null onto stdin");
if (dup2(2, 1) != 1) die("dup2 stderr onto stdout");
- putenv(asprintf("PREFORK_INTERP_FDS=%d,%d,%d,%d",
- sfd, call_fd, fd0_save, fd1_save));
+ putenv(asprintf("PREFORK_INTERP=%d,%d,%d,%d,%s",
+ sfd, call_fd, fd0_save, fd1_save, socket_path));
execv(
}