close()
click to toggle source
def close
close_read
close_write
close_stderr
end
close_read()
click to toggle source
def close_read
@stdout.close if @stdout
@stdout = nil
end
close_stderr()
click to toggle source
def close_stderr
@stderr.close if @stderr
@stderr = nil
end
close_write()
click to toggle source
def close_write
@stdin.close if @stdin
@stdin = nil
end
exit_status()
click to toggle source
def exit_status
poll_status
@exit_status
end
launch()
click to toggle source
def launch
create_pipes
@pid = Process.fork
unless @pid
@stdout.close
STDOUT.reopen @stdout_child
@stdin.close
STDIN.reopen @stdin_child
@stderr.close
STDERR.reopen @stderr_child
Process.exec cmd
end
@stdout_child.close
@stdin_child.close
@stderr_child.close
true
end
launched?()
click to toggle source
read(length = nil, buffer = nil)
click to toggle source
def read(length = nil, buffer = nil)
@stdout.read(length, buffer)
end
read_stderr(length = nil, buffer = nil)
click to toggle source
def read_stderr(length = nil, buffer = nil)
@stderr.read(length, buffer)
end
readline()
click to toggle source
def readline
@stdout.readline
end
resume()
click to toggle source
def resume
signal('CONT')
end
running?()
click to toggle source
def running?
poll_status(Process::WNOHANG)
end
signal(signal)
click to toggle source
def signal(signal)
Process.kill(signal, @pid)
end
suspend()
click to toggle source
def suspend
signal('STOP')
end
terminate(signal = 'TERM')
click to toggle source
def terminate(signal = 'TERM')
signal(signal)
end
terminated?()
click to toggle source
def terminated?
launched? && !running?
end
wait()
click to toggle source
write(str)
click to toggle source
def write(str)
@stdin.write(str)
end