#include #include #include "config.h" /** * daemon_with_notify - daemonize a process, can wait for child to signal readiness * * Daemons should detach themselves thoroughly from the process which launched * them, and not prevent any filesystems from being unmounted. daemonize() * helps with the process. * * Daemon-with-notify is different in that the child can send a SIGUSR1 to * the parent to indicate it has started (e.g. after memory allocation and * other things that may fail) so that the parent can return a success or * failing exit code and init scripts can pick this up easily. * * Example: * #include * #include * #include * #include * #include * * static void usage(const char *name) * { * errx(1, "Usage: %s [--daemonize]\n", name); * } * * // Wait for a minute, possibly as a daemon. * int main(int argc, char *argv[]) * { * if (argc != 1) { * if (argc == 2 && streq(argv[1], "--daemonize")) { * if (!daemonize(1, 1, 1)) * err(1, "Failed to become daemon"); * } else * usage(argv[1]); * } * sleep(10); // do some init here * daemon_is_ready(); * sleep(20); // will be done in child, detached from parent * exit(0); * } * * License: BSD (3 clause) * Author: Stewart Smith */ int main(int argc, char *argv[]) { if (argc != 2) return 1; if (strcmp(argv[1], "depends") == 0) { return 0; } if (strcmp(argv[1], "libs") == 0) { return 0; } return 1; }