我在本地计算机上安装了Oracle瘦客户端,以便在远程主机上执行SQL命令。 另外,我有一个包含SQL命令的Ruby脚本(使用OCI8 gem),脚本运行正常。
但是,要运行SQL命令,我需要打开隧道,转发到远程Oracle正在侦听的端口:
ssh -L 1521:localhost:1521 <user>@<host>
运行此命令会将我登录到我不想要的远程主机。
我找到了以下运行命令,它创建了一个隧道,转发了特定的端口,我可以成功运行包含SQL命令的Ruby脚本。
tunnel = fork do
exec "ssh -f <user>@<host> -L 1521:localhost:1521 -N"
end
因此,隧道是在后台创建的,但是,我还需要终止隧道,断开与远程实例的连接。我尝试了以下方法:
Process.kill('HUP', tunnel)
但是,隧道没有被杀死。
有没有办法可以在Ruby脚本中终止/终止隧道?
答案 0 :(得分:0)
HUP
信号不会杀死进程,只会向其发送信号,该进程可以自由忽略它。 HUP
通常用于表示应重新加载配置文件。
你想要的是:
Process.kill('INT', tunnel)
对礼貌要求不起作用的情况采用更具侵略性的版本:
Process.kill('KILL', tunnel)