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
我有以下代码片段:
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