# File lib/cft/commands.rb, line 184
            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
                    # The process stopping us by removing the pid file
                    # leaves its pid in ppid. Tell it that we are done
                    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