---
 st.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/st.c b/st.c
index 0628707..d5cfd74 100644
--- a/st.c
+++ b/st.c
@@ -824,10 +824,15 @@ ttyread(void)
        static int buflen = 0;
        int written;
        int ret;
+       pid_t ret_pid;
 
        /* append read bytes to unprocessed bytes */
-       if ((ret = read(cmdfd, buf+buflen, LEN(buf)-buflen)) < 0)
-               die("couldn't read from shell: %s\n", strerror(errno));
+       if ((ret = read(cmdfd, buf+buflen, LEN(buf)-buflen)) < 0) {
+                ret_pid = waitpid(pid, NULL, WNOHANG);
+                if (ret_pid == pid) /* child is dead */
+                         exit(EXIT_SUCCESS);
+                else die("couldn't read from shell: %s\n", strerror(errno));
+       }
        buflen += ret;
 
        written = twrite(buf, buflen, 0);
-- 
2.17.0


Reply via email to