Index: twisted/internet/process.py
===================================================================
--- twisted/internet/process.py	(revision 19890)
+++ twisted/internet/process.py	(working copy)
@@ -277,6 +277,7 @@
         if not proto:
             assert 'r' not in childFDs.values()
             assert 'w' not in childFDs.values()
+        self.reactor = reactor
         if not signal.getsignal(signal.SIGCHLD):
             log.msg("spawnProcess called, but the SIGCHLD handler is not "
                     "installed. This probably means you have not yet "
@@ -661,6 +662,8 @@
         if not self.lostProcess:
             #print "maybe, but haven't .lostProcess yet"
             self.reapProcess()
+            if not self.lostProcess:
+                self.reactor.callLater(0.01, self.maybeCallProcessEnded)
             return
         try:
             exitCode = sig = None
