ruby: 运行 来自分叉子进程的命令

ruby: running a command from a forked child process

我有以下代码片段:

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

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

原来是将 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