在Ruby中,我清楚地知道,最近註冊的信號捕集器的一個優先,使:紅寶石信號捕手優先
Signal.trap("TERM") {puts "foo"; exit}
Signal.trap("TERM") {puts "bar"; exit}
如果我發出「殺」以上腳本,它會打印出「酒吧」並退出。
有沒有一種方法,在Ruby本身,爲trappers強制執行某種範圍?
我的具體情況是這樣的:
我們有一個定義了自己的捕獸的應用程序(這個故事,我們只能說這只是陷阱「期限」)的命名空間的信號模塊。該代碼在運行時需要進入應用程序,並且在此之後幾乎不做任何處理。
第三方寶石(我不會指名道姓),我們使用,在初始化方法「術語」 實際上註冊了自己的捕手,所以最近初始化的對象將是一個處理「 TERM「信號,結果不理想......
儘管第三方gems的對象可能有自己的trappers定義,但我不希望它們影響我的應用程序。
有人知道有一種方法可以讓非初始化非非第三方的捕捉器優先順序變得太花哨嗎?
這聽起來像是第三方gem中的一個壞bug ......如果它有多個對象會發生什麼?它是否有一些調用所有活動對象的處理程序的方法? – nneonneo
它的確如此,但它與信號捕獲無關,因爲給定信號的最新註冊捕獲器將是Ruby始終用於該信號的捕獲器。我不確定這是Ruby的默認行爲,還是可配置或什麼。 (雖然我同意它可能不是第三方寶石中的理想行爲) –