ruby:从分叉子进程运行命令

时间:2015-05-26 16:10:13

标签: python ruby ssh io fabric

我有以下代码片段:

job1 = fork do
    ret = `some_bash_script_running_python_fabric_task`
end

Process.detach(job1)

此代码旨在守护进程,因此当子进程在后台运行时父进程退出。

我得到一个python异常,说明termios.error: (5, 'Input/output error')

我发现避免父进程退出修复了这种情况,如下所示:

job1 = fork do
    ret = `some_bash_script_running_python_fabric_task`
end

sleep 30

有人可以帮忙吗? 提前致谢

1 个答案:

答案 0 :(得分:0)

原来是将stdin从父进程重定向到子进程。

见下文:

Perl's backticks/system giving "tcsetattr: Input/output error"

Access STDIN of child process without capturing STDOUT or STDERR

这是解决方案:

read_io, write_io = IO.pipe
job1 = fork do
    write_io.close
    STDIN.reopen(read_io)

    puts `fab example`
end

Process.detach(job1)
read_io.close
write_io.close