def terminate options = {}, &block
options = { :seconds => Float(options).to_i } unless Hash === options
seconds = getopt :seconds, options
raise ::Terminator::Error, "Time to kill must be at least 1 second" unless seconds >= 1
trap = getopt :trap, options, lambda{ eval("raise(::Terminator::Error, 'Timeout out after #{ seconds }s')", block) }
handler = Signal.trap(signal, &trap)
terminator_pid = plot_to_kill pid, :in => seconds, :with => signal
begin
block.call
nuke_terminator(terminator_pid)
ensure
Signal.trap(signal, handler)
end
end