【问题标题】:ruby: running a command from a forked child processruby:从分叉的子进程运行命令
【发布时间】:2015-05-26 16:10:13
【问题描述】:

我有以下 sn-p 代码:

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

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

【问题讨论】:

  • 操作系统?我在 linux 控制台中使用sleep 10 ; ls 脚本运行了一个示例,没有任何问题。
  • 操作系统是 linux。该脚本实际上是一个在远程机器上运行 ssh 命令的结构脚本

标签: python ruby ssh io fabric


【解决方案1】:

原来是将标准输入从父进程重定向到子进程的问题。

见下文:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 2010-10-03
    相关资源
    最近更新 更多