def execute(session, args)
unless @resume
Cft::Puppet::genstate(session.path(:pp_before))
Cft::RPM::genstate(session.path(:rpm_before))
end
monitor = false
oldusr1 = trap("SIGUSR1") do
monitor = true
end
fork do
mode = @resume ? "a" : "w"
$stdout = File::open(session.path(:stdout), mode)
$stderr = File::open(session.path(:stderr), mode)
$stdin = File::open("/dev/null", "r")
begin
m = Cft::Monitor.new(session, roots, @resume)
m.monitor()
rescue => detail
$stderr.puts "Monitoring failed: #{detail} at"
$stderr.puts detail.backtrace
end
ppid = session.path(:ppid)
if File::exist?(ppid)
File::open(ppid, "r") do |f|
id = f.read.chomp.to_i
Process::kill("SIGUSR1", id)
end
end
exit(0)
end
slept = 0
while not monitor and slept < 10
slept += 0.5
sleep 0.5
end
trap("SIGUSR1", oldusr1)
if slept >= 10
puts "Timed out waiting for daemon to start"
return 1
end
return 0
end