mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-06 20:28:33 +00:00
![]() Support `#[unix_sigpipe = "inherit|sig_dfl"]` on `fn main()` to prevent ignoring `SIGPIPE` When enabled, programs don't have to explicitly handle `ErrorKind::BrokenPipe` any longer. Currently, the program ```rust fn main() { loop { println!("hello world"); } } ``` will print an error if used with a short-lived pipe, e.g. % ./main | head -n 1 hello world thread 'main' panicked at 'failed printing to stdout: Broken pipe (os error 32)', library/std/src/io/stdio.rs:1016:9 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace by enabling `#[unix_sigpipe = "sig_dfl"]` like this ```rust #![feature(unix_sigpipe)] #[unix_sigpipe = "sig_dfl"] fn main() { loop { println!("hello world"); } } ``` there is no error, because `SIGPIPE` will not be ignored and thus the program will be killed appropriately: % ./main | head -n 1 hello world The current libstd behaviour of ignoring `SIGPIPE` before `fn main()` can be explicitly requested by using `#[unix_sigpipe = "sig_ign"]`. With `#[unix_sigpipe = "inherit"]`, no change at all is made to `SIGPIPE`, which typically means the behaviour will be the same as `#[unix_sigpipe = "sig_dfl"]`. See https://github.com/rust-lang/rust/issues/62569 and referenced issues for discussions regarding the `SIGPIPE` problem itself See the [this](https://rust-lang.zulipchat.com/#narrow/stream/219381-t-libs/topic/Proposal.3A.20First.20step.20towards.20solving.20the.20SIGPIPE.20problem) Zulip topic for more discussions, including about this PR. Tracking issue: https://github.com/rust-lang/rust/issues/97889 |
||
---|---|---|
.. | ||
fd | ||
kernel_copy | ||
locks | ||
os | ||
os_str | ||
process | ||
alloc.rs | ||
android.rs | ||
args.rs | ||
cmath.rs | ||
env.rs | ||
fd.rs | ||
fs.rs | ||
futex.rs | ||
io.rs | ||
kernel_copy.rs | ||
l4re.rs | ||
memchr.rs | ||
mod.rs | ||
net.rs | ||
os_str.rs | ||
os.rs | ||
path.rs | ||
pipe.rs | ||
rand.rs | ||
stack_overflow.rs | ||
stdio.rs | ||
thread_local_dtor.rs | ||
thread_local_key.rs | ||
thread_parker.rs | ||
thread.rs | ||
time.rs | ||
weak.rs |