diff --git a/Data/Conduit/Process/Unix.hs b/Data/Conduit/Process/Unix.hs
--- a/Data/Conduit/Process/Unix.hs
+++ b/Data/Conduit/Process/Unix.hs
@@ -38,8 +38,10 @@
 import           Control.Arrow                   ((***))
 import           Control.Concurrent              (forkIO)
 import           Control.Concurrent              (threadDelay)
-import           Control.Concurrent.MVar         (MVar, modifyMVar, newMVar,
-                                                  readMVar, swapMVar)
+import           Control.Concurrent.MVar         (MVar, modifyMVar,
+                                                  newEmptyMVar, newMVar,
+                                                  putMVar, readMVar, swapMVar,
+                                                  takeMVar)
 import           Control.Exception               (Exception, SomeException,
                                                   bracketOnError, finally,
                                                   handle, mask, mask_,
@@ -230,7 +232,7 @@
 -- child process.
 --
 -- Since 0.2.1
-data TrackedProcess = TrackedProcess !ProcessTracker !(IORef MaybePid)
+data TrackedProcess = TrackedProcess !ProcessTracker !(IORef MaybePid) !(IO ())
 
 data MaybePid = NoPid | Pid !CPid
 
@@ -268,11 +270,13 @@
             c_track_process pt pid 1
             return $ Pid pid
     ipid <- newIORef mpid'
-    let tp = TrackedProcess pt ipid
+    baton <- newEmptyMVar
+    let tp = TrackedProcess pt ipid (takeMVar baton)
     case mpid' of
         NoPid -> return ()
         Pid _ -> void $ forkIO $ do
             void $ waitForProcess ph
+            putMVar baton ()
             untrackProcess tp
     return $! tp
 
@@ -281,7 +285,7 @@
 --
 -- Since 0.2.1
 untrackProcess :: TrackedProcess -> IO ()
-untrackProcess (TrackedProcess pt ipid) = mask_ $ do
+untrackProcess (TrackedProcess pt ipid _) = mask_ $ do
     mpid <- readIORef ipid
     case mpid of
         NoPid -> return ()
@@ -398,8 +402,8 @@
                             Right pid -> do
                                 log $ "Process created: " `S8.append` exec
                                 return (Running pid, do
-                                    void $ trackProcess processTracker pid
-                                    void $ waitForProcess pid
+                                    TrackedProcess _ _ wait <- trackProcess processTracker pid
+                                    wait
                                     loop (Just now))
             next
     forkIO $ loop Nothing
diff --git a/unix-process-conduit.cabal b/unix-process-conduit.cabal
--- a/unix-process-conduit.cabal
+++ b/unix-process-conduit.cabal
@@ -2,7 +2,7 @@
 --  documentation, see http://haskell.org/cabal/users-guide/
 
 name:                unix-process-conduit
-version:             0.2.1.1
+version:             0.2.1.2
 synopsis:            Run processes on Unix systems, with a conduit interface
 description:         This library allows you to provide @conduit@ datatypes for the input and output streams. Note that you must compile your programs with @-threaded@.
 homepage:            https://github.com/snoyberg/conduit
