超越 Ctrl-C:Unix 信号处理的黑暗角落

2024-09-08

本文深入探讨了Unix信号处理机制,从信号的基本概念、发送方式到信号处理函数的局限性都进行了详细介绍。作者以下载管理器为例,阐述了信号处理中可能遇到的问题,并引入了异步Rust以及Tokio框架中的select!机制来解决这些问题。文章还探讨了进程组的概念以及如何在异步Rust中管理子进程的信号处理。

阅读更多
未分类 异步Rust

在 illumos 上调试 rustc 段错误

2024-08-06

本文记录了一次在 illumos 操作系统上调试 Rust 编译器 (rustc) 段错误的经历。作者首先介绍了 Rust 编译器的自举过程以及段错误的背景信息,然后详细描述了使用 illumos 提供的各种调试工具(如 coreadm、mdb、pmap 和 truss)逐步定位问题的过程。通过分析寄存器、调用堆栈、地址空间和系统调用,作者最终确定问题是由 rustc 解析器中的调用堆栈耗尽引起的,并进一步发现 stacker 库的使用加剧了这个问题。作者还提供了一些改进建议,例如在 rustc 中更频繁地调用 stacker、修复 stacker 在 illumos 上无法检测堆栈大小的问题,以及在 illumos 上运行 Rust CI 等。

阅读更多
未分类 illumos