diff --git a/util-linux/script.c b/util-linux/script.c index 700f0cb0a..5d6f4d924 100644 --- a/util-linux/script.c +++ b/util-linux/script.c @@ -115,7 +115,11 @@ int script_main(int argc ATTRIBUTE_UNUSED, char **argv) /* TODO: don't use full_write's, use proper write buffering */ while (fd_count) { /* not safe_poll! we want SIGCHLD to EINTR poll */ - poll(ppfd, fd_count, -1); + if (poll(ppfd, fd_count, -1) < 0 && errno != EINTR) { + /* If child exits too quickly, we may get EIO: + * for example, try "script -c true" */ + break; + } if (pfd[0].revents) { count = safe_read(0, buf, sizeof(buf)); if (count <= 0) {