2016-10-06 4 views
0

INT 또는 TERM과 같은 신호를 수신 할 때 정상적으로 종료되지 않는 라이브러리를 사용하고 있습니다. 나는 그 (것)들을 덫을 놓고 우아하게 나가고 싶으면. 원숭이 패치 신호를 외부 모듈에 트래핑하는 것이 가능합니까? 내 코드에 대한 신호 트래핑은 정상적으로 작동하지만 모듈에서 코드가 활성화되어있는 동안 INT를 호출 할 때는 아무런 효과가 없습니다.Ruby : 신호 처리 용 원숭이 패치 모듈

답변

0

Monkeypatching은 일반적으로 네임 스페이스에있는 것보다 많은 방법으로 메소드 나 코드를 교체하여 라이브러리의 코드를 수정하는 작업입니다.

신호 처리는 프로세스 수준에서 수행되므로, 그것이 monkeypatch 할 수있는 것이 아닙니다. 필요한 신호 처리기를 추가하고 코드를 올바르게 응답 시키거나 원하는 종료 작동을 수행하면됩니다. 예를 들어

는 :

Signal.trap("INT") do 
    BustedLibrary.shutdown! 
    exit(0) 
end 

또한, 최상위 수준에 당신이 잡아 다룰 수있는 다른 일을 Interrupt 예외를 볼 수 있습니다.

0

신호는 객체 나 모듈이 아닌 프로세스에 영향을 미치므로 신호를 트랩하기 위해 타사 모듈을 패치 할 필요가 없습니다. 코드에서 그들을 잡아라.