有没有一种方法在Windows上监听信号?

3

我正在使用Rust编写一个针对Windows的小型shell,我想要杀死我派生出来的Command并防止我的shell退出。

有没有一种方法在Rust中捕获Windows的SIGINT等效信号?


Windows控制台(conhost.exe)在附加的进程中生成事件,例如CTRL_C_EVENT。控制台进程可以为这些事件设置处理程序。如果该进程正在使用Microsoft的C运行时,则会安装一个处理程序,该处理程序调用其注册的标准C SIGINT信号的处理程序。如果Rust使用CRT,则可能提供一种机制来忽略SIGINT,或者至少提供一些接口,让您调用C signal(SIGINT, SIG_IGN)或Win32 SetConsoleCtrlHandler(NULL, TRUE) - Eryk Sun
我知道我可以使用FFI,然而我希望(不是必需)有一种更本地的方法来做这件事。 (如果有人告诉我需要使用FFI,我会接受那种答案) - lines
是的,我之前说“SIGINT等效”的原因是有依据的。 - lines
1个回答

0

有一个crate叫做chan-signal,旨在通过生成线程并使其等待信号来帮助处理此问题。

编辑:它目前不支持Windows。

一个RFC要求将此功能集成到语言的标准库中,但它还很年轻。

似乎您的选择是使用FFI。


如果你选择使用 FFI, 请考虑为 chan-signal 做贡献。该作者正在寻求支持 - iajrz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接