use $(LIBENSCVECTOR) instead of libensc_vector.a
[util-vserver.git] / util-vserver / lib_internal / util-exitlikeprocess.c
index b5ab179..5c45020 100644 (file)
 #include <unistd.h>
 #include <signal.h>
 #include <sys/resource.h>
+#include <stdio.h>
 
 void
-exitLikeProcess(int pid, char const *cmd)
+exitLikeProcess(int pid, char const *cmd, int ret)
 {
-  int          status;
+  int                  status;
   
-  if (wait4(pid, &status, 0,0)==-1) return;
+  if (wait4(pid, &status, 0,0)==-1) {
+    
+    perror("wait()");
+    exit(ret);
+  }
 
   if (WIFEXITED(status))
     exit(WEXITSTATUS(status));
@@ -51,10 +56,10 @@ exitLikeProcess(int pid, char const *cmd)
       WRITE_MSG(2, "command '");
       WRITE_STR(2, cmd);
       WRITE_MSG(2, "' (pid ");
-      write    (2, buf, l);
+      Vwrite   (2, buf, l);
       WRITE_MSG(2, ") exited with signal ");
       l = utilvserver_fmt_uint(buf, WTERMSIG(status));      
-      write    (2, buf, l);
+      Vwrite   (2, buf, l);
       WRITE_MSG(2, "; following it...\n");
     }
 
@@ -64,4 +69,22 @@ exitLikeProcess(int pid, char const *cmd)
     kill(getpid(), WTERMSIG(status));
     exit(1);
   }
+  else {
+    char               buf[sizeof(int)*3 + 2];
+    size_t             l = utilvserver_fmt_uint(buf, WTERMSIG(status));
+
+    WRITE_MSG(2, "Unexpected status ");
+    Vwrite   (2, buf, l);
+    WRITE_MSG(2, " from '");
+    if (cmd) {
+      WRITE_STR(2, cmd);
+      WRITE_MSG(2, " (pid ");
+    }
+    l = utilvserver_fmt_uint(buf, pid);
+    Vwrite   (2, buf, l);
+    if (cmd) WRITE_MSG(2, ")\n");
+    else     WRITE_MSG(2, "\n");
+
+    exit(ret);
+  }
 }