Я пытаюсь понять, как обработчики сигналов присоединяются к процессу и их область действия для процесса.
class Main
Signal.trap('USR1') do
Process2.kill
end
def main_process
#do something
p = Process2.new
output = p.give_output
#then again do something
end
end
class Process2
Signal.trap('USR1') do
Process2.kill
end
def self.kill
if @@static_object.blank?
#do nothing
else
#do something
end
end
def give_output
#do something
@@static_object = true
#do something
end
end
Теперь, если я выдаю SIGUSR1
процессу, пока выполняется give_output
, а @@static_object
не равен нулю, обработчик должен вести себя так, как ожидалось. Однако даже после того, как give_output
завершит выполнение, если будет отправлен сигнал, обработчик внутри Process2
поймает его. Насколько я понимаю, обработчик привязывается к процессу. Можем ли мы иметь два обработчика сигналов для одного и того же процесса для одного и того же сигнала? Например, пока выполняется give_output
и выдается сигнал, обработчик внутри Process2
должен получить управление, в противном случае другой обработчик сигнала, определенный в Main
, должен получить управление.