Module: DistribCore::ReceivedSignals
- Defined in:
- lib/distrib_core/received_signals.rb
Overview
A handler for signal interruptions (like INT and TERM). Stores information about received signals.
Class Method Summary collapse
-
.any? ⇒ TrueClass, FalseClass
‘true` when received any signal.
-
.exit_code ⇒ Integer
Proper exit code based on received signal.
-
.force_int? ⇒ TrueClass, FalseClass
‘true` if ’INT’ was sent twice.
-
.message ⇒ String
Human-readable message about received signals.
-
.received?(sig) ⇒ TrueClass, FalseClass
‘true` if signal `sig` was recieved.
-
.signals ⇒ Set<String>
List of received signals.
-
.trap(sig) ⇒ Object
Defines trap for singlas and collects them.
Class Method Details
.any? ⇒ TrueClass, FalseClass
Returns ‘true` when received any signal.
27 28 29 |
# File 'lib/distrib_core/received_signals.rb', line 27 def any? signals.any? end |
.exit_code ⇒ Integer
Returns proper exit code based on received signal.
48 49 50 51 52 |
# File 'lib/distrib_core/received_signals.rb', line 48 def exit_code return 0 if signals.empty? Signal.list[signals.first] end |
.force_int? ⇒ TrueClass, FalseClass
Returns ‘true` if ’INT’ was sent twice.
38 39 40 |
# File 'lib/distrib_core/received_signals.rb', line 38 def force_int? @force_int end |
.message ⇒ String
Returns human-readable message about received signals.
43 44 45 |
# File 'lib/distrib_core/received_signals.rb', line 43 def "RECEIVED SIGNAL #{signals.to_a.join(', ')}." if any? end |
.received?(sig) ⇒ TrueClass, FalseClass
Returns ‘true` if signal `sig` was recieved.
33 34 35 |
# File 'lib/distrib_core/received_signals.rb', line 33 def received?(sig) signals.member?(sig) end |
.signals ⇒ Set<String>
Returns list of received signals.
55 56 57 |
# File 'lib/distrib_core/received_signals.rb', line 55 def signals @signals ||= Set.new end |
.trap(sig) ⇒ Object
Defines trap for singlas and collects them. Exits after second ‘INT’
13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/distrib_core/received_signals.rb', line 13 def trap(sig) Signal.trap(sig) do # Second SIGINT finishes the process immediately if sig == 'INT' && signals.member?('INT') @force_int = true puts 'Received second SIGINT. Exiting...' Kernel.exit(2) # 2 is exit code for SIGINT end puts "Received #{sig}" signals.add(sig) end end |