--- src/corelib/io/orig.qprocess_unix.cpp 2014-04-10 20:37:11.000000000 +0200 +++ src/corelib/io/qprocess_unix.cpp 2014-12-11 17:03:26.000000000 +0100 @@ -1296,17 +1296,18 @@ processManager()->remove(q); } +//https://codereview.qt-project.org/#/c/61294/ bool QProcessPrivate::waitForDeadChild() { Q_Q(QProcess); // read a byte from the death pipe char c; - qt_safe_read(deathPipe[0], &c, 1); + qint64 readcount = qt_safe_read(deathPipe[0], &c, 1); // check if our process is dead int exitStatus; - if (qt_safe_waitpid(pid_t(pid), &exitStatus, WNOHANG) > 0) { + if (qt_safe_waitpid(pid_t(pid), &exitStatus, readcount > 0 ? WNOHANG : 0) > 0) { processManager()->remove(q); crashed = !WIFEXITED(exitStatus); exitCode = WEXITSTATUS(exitStatus);