doc: Documented htpipe.
[ashd.git] / src / multifscgi.c
index 6692402..a865ec7 100644 (file)
@@ -23,6 +23,7 @@
 #include <signal.h>
 #include <sys/wait.h>
 #include <time.h>
+#include <errno.h>
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
@@ -37,6 +38,7 @@ static volatile int done, chdone;
 static void runchild(void)
 {
     execvp(chspec[0], chspec);
+    fprintf(stderr, "%s: %s", chspec[0], strerror(errno));
     exit(127);
 }
 
@@ -64,6 +66,8 @@ static void manage(void)
        pselect(0, NULL, NULL, NULL, NULL, &ns);
        if(chdone) {
            while((ch = waitpid(-1, &st, WNOHANG)) > 0) {
+               if(WCOREDUMP(st))
+                   fprintf(stderr, "multifscgi: child %i (%s) dumped core\n", ch, chspec[0]);
                for(i = 0; i < nchildren; i++) {
                    if(children[i] == ch)
                        children[i] = 0;
@@ -106,6 +110,8 @@ static void killall(void)
            pselect(0, NULL, NULL, NULL, &to, &ns);
            if(chdone) {
                while((ch = waitpid(-1, &st, WNOHANG)) > 0) {
+                   if(WCOREDUMP(st))
+                       fprintf(stderr, "multifscgi: child %i (%s) dumped core\n", ch, chspec[0]);
                    for(i = 0; i < nchildren; i++) {
                        if(children[i] == ch)
                            children[i] = 0;
@@ -133,14 +139,14 @@ static void term(int sig)
 
 static void usage(FILE *out)
 {
-    fprintf(out, "usage: multifscgi NUM PROGRAM [ARGS...]\n");
+    fprintf(out, "usage: multifscgi [-h] NUM PROGRAM [ARGS...]\n");
 }
 
 int main(int argc, char **argv)
 {
     int c;
     
-    while((c = getopt(argc, argv, "h")) >= 0) {
+    while((c = getopt(argc, argv, "+h")) >= 0) {
        switch(c) {
        case 'h':
            usage(stdout);