Class: Guard::Process

Inherits:
Guard
  • Object
show all
Defined in:
lib/guard/process.rb

Instance Method Summary collapse

Constructor Details

#initialize(watchers = [], options = {}) ⇒ Process

Returns a new instance of Process.



7
8
9
10
11
12
13
14
15
16
# File 'lib/guard/process.rb', line 7

def initialize(watchers = [], options = {})
  @pid = nil
  @command = options.fetch(:command).split(" ")
  @env = options[:env] || {}
  @name = options[:name]
  @dir = options[:dir] || Dir.getwd
  @stop_signal = options[:stop_signal] || "TERM"
  @dont_stop = options[:dont_stop]
  super
end

Instance Method Details

#process_running?Boolean

Returns:

  • (Boolean)


22
23
24
25
26
27
28
# File 'lib/guard/process.rb', line 22

def process_running?
  begin
    @pid ? ::Process.kill(0, @pid) : false
  rescue Errno::ESRCH => e
    false
  end
end

#reloadObject



64
65
66
67
68
69
70
71
# File 'lib/guard/process.rb', line 64

def reload
  if wait_for_stop?
    wait_for_stop
  else
    stop
  end
  start
end

#run_allObject



73
74
75
# File 'lib/guard/process.rb', line 73

def run_all
  true
end

#run_on_change(paths) ⇒ Object



77
78
79
# File 'lib/guard/process.rb', line 77

def run_on_change(paths)
  reload
end

#startObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/guard/process.rb', line 30

def start
  UI.info("Starting process #{@name}")
  original_env = {}
  @env.each_pair do |key, value|
    original_env[key] = ENV[key]
    ENV[key] = value
  end
  Dir.chdir(@dir) do
    @pid = Spoon.spawnp(*@command)
  end
  original_env.each_pair do |key, value|
    ENV[key] = value
  end
  UI.info("Started process #{@name}")
end

#stopObject



46
47
48
49
50
51
52
53
54
# File 'lib/guard/process.rb', line 46

def stop
  if @pid
    UI.info("Stopping process #{@name}")
    ::Process.kill(@stop_signal, @pid)
    ::Process.waitpid(@pid) rescue Errno::ESRCH
    @pid = nil
    UI.info("Stopped process #{@name}")
  end
end

#wait_for_stopObject



56
57
58
59
60
61
62
# File 'lib/guard/process.rb', line 56

def wait_for_stop
  if @pid
    UI.info("Process #{@name} is still running...")
    ::Process.waitpid(@pid) rescue Errno::ESRCH
    UI.info("Process #{@name} has stopped!")
  end
end

#wait_for_stop?Boolean

Returns:

  • (Boolean)


18
19
20
# File 'lib/guard/process.rb', line 18

def wait_for_stop?
  @dont_stop
end