Class: RailVerdict::ProcessRunner::Registry

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

Instance Method Summary collapse

Constructor Details

#initializeRegistry

Returns a new instance of Registry.



248
249
250
# File 'lib/rail_verdict/process_runner.rb', line 248

def initialize
  @pids = {}
end

Instance Method Details

#register(pid) ⇒ Object



252
253
254
# File 'lib/rail_verdict/process_runner.rb', line 252

def register(pid)
  @pids[pid] = true
end

#sizeObject



260
261
262
# File 'lib/rail_verdict/process_runner.rb', line 260

def size
  @pids.size
end

#terminate_allObject



264
265
266
267
268
269
270
271
272
273
274
275
276
277
# File 'lib/rail_verdict/process_runner.rb', line 264

def terminate_all
  pids = @pids.keys
  return if pids.empty?

  pids.each { |pid| signal_group(pid, "TERM") }
  deadline = Process.clock_gettime(Process::CLOCK_MONOTONIC) + ProcessRunner::TERM_GRACE_SECONDS
  sleep 0.01 while Process.clock_gettime(Process::CLOCK_MONOTONIC) < deadline
  pids.each do |pid|
    signal_group(pid, "KILL")
  end
  # The active runner owns waitpid; the signal path must not reap the
  # child before its normal cleanup resumes.
  @pids.clear
end

#unregister(pid) ⇒ Object



256
257
258
# File 'lib/rail_verdict/process_runner.rb', line 256

def unregister(pid)
  @pids.delete(pid)
end