diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+## 0.1.15.1
+
+* Catch exceptions thrown by `waitForProcess`
+
 ## 0.1.15
 
 * Use `NO_DELAY1 for TCP client connections [#27](https://github.com/fpco/streaming-commons/issues/27)
diff --git a/Data/Streaming/Process.hs b/Data/Streaming/Process.hs
--- a/Data/Streaming/Process.hs
+++ b/Data/Streaming/Process.hs
@@ -31,11 +31,12 @@
     ) where
 
 import           Control.Applicative             ((<$>), (<*>))
-import           Control.Concurrent              (forkIO)
+import           Control.Concurrent              (forkIOWithUnmask)
 import           Control.Concurrent.STM          (STM, TMVar, atomically,
                                                   newEmptyTMVar, putTMVar,
                                                   readTMVar)
-import           Control.Exception               (Exception, throwIO)
+import           Control.Exception               (Exception, throwIO, try, throw,
+                                                  SomeException)
 import           Control.Monad.IO.Class          (MonadIO, liftIO)
 import           Data.Maybe                      (fromMaybe)
 import           Data.Streaming.Process.Internal
@@ -157,7 +158,16 @@
         }
 
     ec <- atomically newEmptyTMVar
-    _ <- forkIO $ waitForProcess ph >>= atomically . putTMVar ec
+    -- Apparently waitForProcess can throw an exception itself when
+    -- delegate_ctlc is True, so to avoid this TMVar from being left empty, we
+    -- capture any exceptions and store them as an impure exception in the
+    -- TMVar
+    _ <- forkIOWithUnmask $ \_unmask -> try (waitForProcess ph)
+        >>= atomically
+          . putTMVar ec
+          . either
+              (throw :: SomeException -> a)
+              id
 
     (,,,)
         <$> getStdin stdinH
diff --git a/streaming-commons.cabal b/streaming-commons.cabal
--- a/streaming-commons.cabal
+++ b/streaming-commons.cabal
@@ -1,5 +1,5 @@
 name:                streaming-commons
-version:             0.1.15
+version:             0.1.15.1
 synopsis:            Common lower-level functions needed by various streaming data libraries
 description:         Provides low-dependency functionality commonly needed by various streaming data libraries, such as conduit and pipes.
 homepage:            https://github.com/fpco/streaming-commons
@@ -49,6 +49,7 @@
 
   build-depends:       base >= 4.4 && < 5
                      , array
+                     , async
                      , blaze-builder >= 0.3 && < 0.5
                      , bytestring
                      , directory
