Module: Gitlab::ProcessManagement
- Defined in:
- lib/gitlab/process_management.rb
Class Method Summary collapse
-
.all_alive?(pids) ⇒ Boolean
Returns true if all the processes are alive.
- .any_alive?(pids) ⇒ Boolean
-
.modify_signals(signals, command) ⇒ Object
Traps the given signals with the given command.
- .pids_alive(pids) ⇒ Object
- .process_alive?(pid) ⇒ Boolean
- .process_died?(pid) ⇒ Boolean
- .signal(pid, signal) ⇒ Object
- .signal_processes(pids, signal) ⇒ Object
-
.trap_signals(signals) ⇒ Object
Traps the given signals and yields the block whenever these signals are received.
- .write_pid(path) ⇒ Object
Class Method Details
.all_alive?(pids) ⇒ Boolean
Returns true if all the processes are alive.
44 45 46 47 48 49 50 |
# File 'lib/gitlab/process_management.rb', line 44 def self.all_alive?(pids) pids.each do |pid| return false unless process_alive?(pid) end true end |
.any_alive?(pids) ⇒ Boolean
52 53 54 |
# File 'lib/gitlab/process_management.rb', line 52 def self.any_alive?(pids) pids_alive(pids).any? end |
.modify_signals(signals, command) ⇒ Object
Traps the given signals with the given command.
Example:
modify_signals(%i(HUP TERM), 'DEFAULT')
28 29 30 |
# File 'lib/gitlab/process_management.rb', line 28 def self.modify_signals(signals, command) signals.each { |signal| trap(signal, command) } end |
.pids_alive(pids) ⇒ Object
56 57 58 |
# File 'lib/gitlab/process_management.rb', line 56 def self.pids_alive(pids) pids.select { |pid| process_alive?(pid) } end |
.process_alive?(pid) ⇒ Boolean
60 61 62 63 64 65 66 |
# File 'lib/gitlab/process_management.rb', line 60 def self.process_alive?(pid) return false if pid.nil? # Signal 0 tests whether the process exists and we have access to send signals # but is otherwise a noop (doesn't actually send a signal to the process) signal(pid, 0) end |
.process_died?(pid) ⇒ Boolean
68 69 70 |
# File 'lib/gitlab/process_management.rb', line 68 def self.process_died?(pid) !process_alive?(pid) end |
.signal(pid, signal) ⇒ Object
32 33 34 35 36 37 |
# File 'lib/gitlab/process_management.rb', line 32 def self.signal(pid, signal) Process.kill(signal, pid) true rescue Errno::ESRCH false end |
.signal_processes(pids, signal) ⇒ Object
39 40 41 |
# File 'lib/gitlab/process_management.rb', line 39 def self.signal_processes(pids, signal) pids.each { |pid| signal(pid, signal) } end |
.trap_signals(signals) ⇒ Object
Traps the given signals and yields the block whenever these signals are received.
The block is passed the name of the signal.
Example:
trap_signals(%i(HUP TERM)) do |signal|
...
end
15 16 17 18 19 20 21 |
# File 'lib/gitlab/process_management.rb', line 15 def self.trap_signals(signals) signals.each do |signal| trap(signal) do yield signal end end end |
.write_pid(path) ⇒ Object
72 73 74 75 76 |
# File 'lib/gitlab/process_management.rb', line 72 def self.write_pid(path) File.open(path, 'w') do |handle| handle.write(Process.pid.to_s) end end |