Class: SAAL::ForkedRunner

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeForkedRunner

Returns a new instance of ForkedRunner.



19
20
21
22
23
# File 'lib/daemon.rb', line 19

def initialize
  @rd, @wr = IO.pipe
  @stop = false
  trap_signals
end

Class Method Details

.run_as_fork(opts = {}) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/daemon.rb', line 3

def self.run_as_fork(opts={})
  if opts[:foreground]
    $stderr.puts "Running saal_daemon #{SAAL::VERSION} in foreground..."
    yield ForkedRunner.new
  else
    fork do
      if not opts[:keep_stdin]
        $stdin.reopen "/dev/null"
        $stdout.reopen "/dev/null", "a"
        $stderr.reopen "/dev/null", "a"
      end
      yield ForkedRunner.new
    end
  end
end

Instance Method Details

#do_exitObject



30
31
32
33
# File 'lib/daemon.rb', line 30

def do_exit
  @stop = true
  @wr.write(1) 
end

#select(read, write = [], err = [], time = nil) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/daemon.rb', line 43

def select(read, write=[], err=[], time=nil)
  if time
    Kernel.select(read+[@rd],write,err,time)
  else
    Kernel.select(read+[@rd],write,err)
  end
end

#sleep(time) ⇒ Object



39
40
41
# File 'lib/daemon.rb', line 39

def sleep(time)
  select([],[],[],time)
end

#stop?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/daemon.rb', line 35

def stop?
  @stop
end

#trap_signalsObject



25
26
27
28
# File 'lib/daemon.rb', line 25

def trap_signals
  Signal.trap("TERM") {do_exit}
  Signal.trap("INT") {do_exit}
end