【问题标题】:How to handle SIGINT in a program using CRT unit?如何在使用 CRT 单元的程序中处理 SIGINT?
【发布时间】:2013-01-28 18:51:02
【问题描述】:

我有一个使用 CRT 单元的控制台应用程序 (program)。在 Linux 下,当我按下CTRL+C 时,什么也没有发生。但是,我想按预期处理这个SIGINT 信号(通过立即退出程序)。我发现一些注意事项,使用 CRT 重新定义了 STDIN 和 STDOUT 的东西,所以普通的 SIG 处理程序不起作用。目前,我尝试了fpSignal(SIGINT, SignalHandler(@DoSig));,但仍然按下CTRL+C 没有任何作用。当我手动(通过 htop)向进程发送 SIGINT 时,处理程序会启动。但不是使用 CTRL+C。 不幸的是,不使用CRT 单位不是一种选择。

非常感谢任何帮助:)

【问题讨论】:

标签: linux freepascal lazarus


【解决方案1】:

原因是 CRT 单元将重定向标准输入/输出句柄,因此您必须“手动”检查 SIGINT,信号处理程序将不起作用。 您应该使用 KeyPressed 功能检查是否按下了键,然后使用 ReadKey 检查是否已发送 SIGINT(例如:Ctrl-C)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-21
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    相关资源
    最近更新 更多