diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Revision history for reflex-process
 
+## 0.2.1.0
+
+* `createProcess`: Ensure that handle is open before attempting to check whether it is readable
+
 ## 0.2.0.0
 
 * Breaking change: Generalise input and output parameters of createRedirectedProcess. Existing programs should replace `Process t` with `Process t ByteString ByteString` and `ProcessConfig t` with `ProcessConfig t ByteString`.
diff --git a/reflex-process.cabal b/reflex-process.cabal
--- a/reflex-process.cabal
+++ b/reflex-process.cabal
@@ -1,6 +1,6 @@
 cabal-version: >=1.10
 name: reflex-process
-version: 0.2.0.0
+version: 0.2.1.0
 synopsis: reflex-frp interface for running shell commands
 description: Run shell commands from within reflex applications and interact with them over a functional-reactive interface
 bug-reports: https://github.com/reflex-frp/reflex-process/issues
diff --git a/src/Reflex/Process.hs b/src/Reflex/Process.hs
--- a/src/Reflex/Process.hs
+++ b/src/Reflex/Process.hs
@@ -141,12 +141,13 @@
       H.hSetBuffering h H.LineBuffering
       let go = do
             open <- H.hIsOpen h
-            readable <- H.hIsReadable h
-            when (open && readable) $ do
-              out <- BS.hGetSome h 32768
-              if BS.null out
-                then return ()
-                else do
-                  void $ trigger out
-                  go
+            when open $ do
+              readable <- H.hIsReadable h
+              when readable $ do
+                out <- BS.hGetSome h 32768
+                if BS.null out
+                  then return ()
+                  else do
+                    void $ trigger out
+                    go
       return go
