-
Notifications
You must be signed in to change notification settings - Fork 12.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
process_unix::do_exec should reset the signal mask to its value on startup, not clear it #39185
Comments
Sounds reasonable to me to reset to whatever we had on startup! I think it's also fine to store away what the signal was for |
This issue can be closed. It was fixed by #101077. |
@workingjubilee Sorry for direct ping, but I suspect you did not notice that this issue can be closed since you just added a label to it? Maybe you can help me close it? Thank you :) |
Not a problem! I often don't examine the contents of issues before labeling them if I can determine the label is appropriate from the title. Closing, thank you! |
To avoid confusing future visitors: it should be noted that #101077 fixes this in a way that is different than was originally proposed in this issue (the fix removes the mask reset altogether rather than restoring the mask to what it was pre- |
The Unix implementation of
process::spawn
(specifically,do_exec
insys/unix/process/process_unix.rs
) contains logic to restore the signal mask to the default in child processes...Completely clearing the signal mask here is subtly wrong. It should instead be restored to whatever it was when the parent process started up. Certain standard shell utilities — the best-known is
nohup
— deliberately start a process with some signals already masked, and expect that those settings will be inherited by any further subprocesses.For the same reason, the handler for
SIGPIPE
should be reset not toSIG_DFL
, but to whichever ofSIG_DFL
orSIG_IGN
it was before libstd ignored it.(In order to make it possible to implement such utilities in Rust, the ideal resolution here would involve adding
mask_signals
andignore_signals
knobs tounix::process::CommandExt
, and document that the defaults for these are whatever was observed on process startup. But I don't see a clean way to do that without a lot more support for signals in general in libstd, maybe more than is properly in scope.)The text was updated successfully, but these errors were encountered: