X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Flib_internal%2Futil-exitlikeprocess.c;h=4a94eb109f6d2766c8b14deccc04aac7f3aa80de;hb=88759454c4c613684321b74e7d7ebf05ac7913f2;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..4a94eb1 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)); @@ -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 "); + write (2, buf, l); + WRITE_MSG(2, " from '"); + if (cmd) { + WRITE_STR(2, cmd); + WRITE_MSG(2, " (pid "); + } + l = utilvserver_fmt_uint(buf, pid); + write (2, buf, l); + if (cmd) WRITE_MSG(2, ")\n"); + else WRITE_MSG(2, "\n"); + + exit(ret); + } }