X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Flib_internal%2Futil-exitlikeprocess.c;h=5c4502074eb2887c87fab33768cd0763db917330;hb=a68fca9dd6797a063bec66ab3f0d07a046b2a0b3;hp=b5ab179322e0f0fccc43368337b206278163c5f6;hpb=73020c0b72818c315eeb5e3d35cb6f3cd9f39d90;p=util-vserver.git diff --git a/util-vserver/lib_internal/util-exitlikeprocess.c b/util-vserver/lib_internal/util-exitlikeprocess.c index b5ab179..5c45020 100644 --- a/util-vserver/lib_internal/util-exitlikeprocess.c +++ b/util-vserver/lib_internal/util-exitlikeprocess.c @@ -30,13 +30,18 @@ #include #include #include +#include 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); + } }