Ruby:用于信号处理的猴子补丁模块

时间:2016-10-06 00:17:04

标签: ruby signals sigint

我使用的库在接收INT或TERM等信号时不会正常退出。我想抓住它们并优雅地退出。是否有可能将补丁信号陷入外部模块?我的代码的信号捕获工作正常,但在模块中的代码处于活动状态时调用INT时没有任何好处。

2 个答案:

答案 0 :(得分:0)

信号不会影响对象或模块,但会影响进程,因此无需修补第三方模块来捕获信号。只需将它们捕获到您的代码中即可。

答案 1 :(得分:0)

Monkeypatching涉及通过交换方法或在更多方法中使用干扰来修改库代码。

信号处理是在进程级别完成的,所以它不是你可以monkeypatch的东西。您可以做的是添加必需的信号处理程序并获取正确响应的代码,或执行您希望它执行的任何关闭操作。

例如:

@Override
    protected void onPostExecute(Value[] variableValues) {
        // Update your views here
String gas = Double.toString(variableValues[0].getValue());
            mgasDetector.setText(gas);

     }

您可能还会在顶层看到Signal.trap("INT") do BustedLibrary.shutdown! exit(0) end 例外,这是您可以捕捉和处理的另一件事。