patch 7.4.1878
Problem:    Whether a job has exited isn't detected until a character is
            typed.  After calling exit_cb the cursor is in the wrong place.
Solution:   Don't wait forever for a character to be typed when there is a
            pending job.  Update the screen if neede after calling exit_cb.
diff --git a/src/os_unix.c b/src/os_unix.c
index f7b5ae4..b4808b5 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -438,17 +438,31 @@
 
     for (;;)	/* repeat until we got a character */
     {
+	long	wtime_now = -1L;
+
 	while (do_resize)    /* window changed size */
 	    handle_resize();
 
 #ifdef MESSAGE_QUEUE
 	parse_queued_messages();
+
+# ifdef FEAT_JOB_CHANNEL
+	if (has_pending_job())
+	{
+	    /* Don't wait longer than a few seconds, checking for a finished
+	     * job requires polling. */
+	    if (p_ut > 9000L)
+		wtime_now = 1000L;
+	    else
+		wtime_now = 10000L - p_ut;
+	}
+# endif
 #endif
 	/*
 	 * We want to be interrupted by the winch signal
 	 * or by an event on the monitored file descriptors.
 	 */
-	if (!WaitForChar(-1L))
+	if (!WaitForChar(wtime_now))
 	{
 	    if (do_resize)	    /* interrupted by SIGWINCH signal */
 		handle_resize();