diff --git a/src/shell/mod.rs b/src/shell/mod.rs
index 19b9b0311434122b501dcdfcebaa199bb753092e..605fe2b62c6355112b6613f7a29ac9470d711cc7 100644
--- a/src/shell/mod.rs
+++ b/src/shell/mod.rs
@@ -411,6 +411,8 @@ impl<'a> Shell {
         use std::process::exit;
         use sys;
 
+        sys::signals::block();
+
         let (stdout_read, stdout_write) = sys::pipe2(sys::O_CLOEXEC)
             .map(|fds| unsafe { (File::from_raw_fd(fds.0), File::from_raw_fd(fds.1)) })
             .map_err(IonError::Fork)?;
@@ -421,6 +423,8 @@ impl<'a> Shell {
 
         match unsafe { sys::fork() } {
             Ok(0) => {
+                sys::signals::unblock();
+
                 let _ = sys::dup2(stdout_write.as_raw_fd(), sys::STDOUT_FILENO);
                 let _ = sys::dup2(stderr_write.as_raw_fd(), sys::STDERR_FILENO);
 
diff --git a/src/shell/pipe_exec/job_control.rs b/src/shell/pipe_exec/job_control.rs
index 6cd9952f38cbf3389f589361a6f86c0fe3166e87..b391a8ac5e48a8d7c2590d6ec058a8e40f3e2948 100644
--- a/src/shell/pipe_exec/job_control.rs
+++ b/src/shell/pipe_exec/job_control.rs
@@ -3,10 +3,10 @@ use super::super::Shell;
 use super::super::signals;
 use super::super::status::*;
 use std::fmt;
+use std::process;
 use std::sync::{Arc, Mutex};
 use std::thread::{sleep, spawn};
 use std::time::Duration;
-use std::process;
 use sys;
 
 use sys::job_control as self_sys;