Class: Parallel::UserInterruptHandler
- Inherits:
-
Object
- Object
- Parallel::UserInterruptHandler
- Defined in:
- lib/parallel.rb
Constant Summary collapse
- INTERRUPT_SIGNAL =
:SIGINT
Class Method Summary collapse
- .kill(thing) ⇒ Object
-
.kill_on_ctrl_c(pids, options) ⇒ Object
kill all these pids or threads if user presses Ctrl+c.
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, ) @to_be_killed ||= [] old_interrupt = nil signal = .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 |