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;