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



181
182
183
184
185
186
# File 'lib/parallel.rb', line 181

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



161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
# File 'lib/parallel.rb', line 161

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
      warn '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