终止分叉进程(转发端口)

时间:2015-01-20 22:45:29

标签: ruby oracle ssh

我在本地计算机上安装了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脚本中终止/终止隧道?

1 个答案:

答案 0 :(得分:0)

HUP信号不会杀死进程,只会向其发送信号,该进程可以自由忽略它。 HUP通常用于表示应重新加载配置文件。

你想要的是:

Process.kill('INT', tunnel)

对礼貌要求不起作用的情况采用更具侵略性的版本:

Process.kill('KILL', tunnel)