Index: bin/sh/output.c =================================================================== --- bin/sh/output.c +++ bin/sh/output.c @@ -54,6 +54,7 @@ #include #include #include +#include #include "shell.h" #include "syntax.h" @@ -310,9 +311,12 @@ int ntry; int i; int n; + struct timespec rq; n = nbytes; ntry = 0; + rq.tv_sec = 0; + rq.tv_nsec = 10000000; /* 10msec */ for (;;) { i = write(fd, buf, n); if (i > 0) { @@ -323,6 +327,11 @@ } else if (i == 0) { if (++ntry > 10) return nbytes - n; + } else if (errno == EAGAIN) { + if (++ntry > 10) + return -1; + (void)nanosleep(&rq, NULL); + continue; } else if (errno != EINTR) { return -1; }