Class: Parallel::UserInterruptHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/parallel.rb

Constant Summary collapse

INTERRUPT_SIGNAL =
:SIGINT

Class Method Summary collapse

Class Method Details

.kill(thing) ⇒ Object


158
159
160
161
162
163
# File 'lib/parallel.rb', line 158

def kill(thing)
  Process.kill(:KILL, thing)
rescue Errno::ESRCH
  # some linux systems already automatically killed the children at this point
  # so we just ignore them not being there
end

.kill_on_ctrl_c(pids, options) ⇒ Object

kill all these pids or threads if user presses Ctrl+c


138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/parallel.rb', line 138

def kill_on_ctrl_c(pids, options)
  @to_be_killed ||= []
  old_interrupt = nil
  signal = options.fetch(:interrupt_signal, INTERRUPT_SIGNAL)

  if @to_be_killed.empty?
    old_interrupt = trap_interrupt(signal) do
      $stderr.puts 'Parallel execution interrupted, exiting ...'
      @to_be_killed.flatten.each { |pid| kill(pid) }
    end
  end

  @to_be_killed << pids

  yield
ensure
  @to_be_killed.pop # do not kill pids that could be used for new processes
  restore_interrupt(old_interrupt, signal) if @to_be_killed.empty?
end