#include #include #include #include #include #include #include "babysit.h" int main(int argc, const char * const argv[]) { /* argv[1] is always set, so this is safe */ const char *service_dir = argv[1]; if (argc != 2) { fprintf(stderr, "Usage: %s [service_dir]\n", argv[0]); exit(100); } if (chdir(service_dir) != 0) { perror("chdir service_dir"); exit(100); } if (open(CONTROL_FIFO, O_WRONLY|O_NONBLOCK) == -1) { /* According to Single Unix and fifo(4) on Linux, opening a fifo * with O_WRONLY|O_NONBLOCK fails with ENXIO if no one is * reading from the other end. So iff this open succeeds, * babysit is running. If it fails with something other than * ENXIO, there is something else hosed anyway, so assume it's * not running "properly" */ exit(100); } exit(0); }