如何使用CRT单元处理程序中的SIGINT?

时间:2013-01-28 18:51:03

标签: linux freepascal lazarus

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

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:0)

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