У тебя обработчики написаны небезопасно. Суть токова: если во время обработки одного из сигналов послать еще один сигнал, то текущий обработчик прервется. В общем, все может оказаться в неконсистентном состоянии. Тебе надо сделать очередь и помещать сигналы в нее, а внутри реактора эту очередь обрабатывать.
http://rubysource.com/the-self-pipe-trick-explained/
Плюс там внизу еще ссылки всякие.