-
Notifications
You must be signed in to change notification settings - Fork 13.1k
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
implement signal handling #11203
Comments
Nominating. |
Assigning P-high, not 1.0. |
cc me. I'm interested in working on this one. |
It would be great to be able to handle signals per task. This way we could send interrupt events to running tasks (e.g. to exit a blocking syscall). Maybe a channel-like interface could allow to extend the OS-specific signal types with custom types/objects. |
This could be an interesting abstraction of |
Pretty sure this would go through the RFC process these days, as it's pretty huge, so moving over there rust-lang/rfcs#1368 |
This involves filling out
libnative/io/mod.rs
, but this is also a very tricky issue. Right now the API is wrapped around what libuv provided for us, but that may not be the best API to have.Dealing with signals is always an incredibly tricky topic, and here's the ideas for what should possibly happen:
signalfd
should be used for everythingsigaction
. I believe that the best way to deal with this is libuv's trick of a self-looping pipe (the signal handler writes the signal onto a pipe which is read in the "event loop"). This will certainly involve some trickiness.It has also been brought up that there are primitives like
sigwait
on unixes which can be used to just block a thread when waiting for "some group of signals", but the API which we have created for signals cannot wrap this functionality. We could add a similar function for libgreen/libnative, but I personally don't think it's worth it. It is worth some discussion, however.The text was updated successfully, but these errors were encountered: