处理操作系统信号
⚠️ Windows 仅支持监听 SIGINT 和 SIGBREAK,从 Deno v1.23 开始。
概念
- Deno.addSignalListener() 可用于捕获和监控操作系统信号。
- Deno.removeSignalListener() 可用于停止监听信号。
设置操作系统信号监听器
用于处理操作系统信号的 API 模仿了您已经熟悉的 addEventListener
和 removeEventListener
API。
⚠️ 请注意,监听操作系统信号不会阻止事件循环完成,即如果不再有待处理的异步操作,进程将退出。
您可以使用Deno.addSignalListener()
函数来处理操作系统信号。
/**
* add_signal_listener.ts
*/
console.log("Press Ctrl-C to trigger a SIGINT signal");
Deno.addSignalListener("SIGINT", () => {
console.log("interrupted!");
Deno.exit();
});
// Add a timeout to prevent process exiting immediately.
setTimeout(() => {}, 5000);
运行:
deno run add_signal_listener.ts
您可以使用Deno.removeSignalListener()
函数来注销之前添加的信号处理程序。
/**
* signal_listeners.ts
*/
console.log("Press Ctrl-C to trigger a SIGINT signal");
const sigIntHandler = () => {
console.log("interrupted!");
Deno.exit();
};
Deno.addSignalListener("SIGINT", sigIntHandler);
// Add a timeout to prevent process existing immediately.
setTimeout(() => {}, 5000);
// Stop listening for a signal after 1s.
setTimeout(() => {
Deno.removeSignalListener("SIGINT", sigIntHandler);
}, 1000);
运行:
deno run signal_listeners.ts