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

Ruby 终止分叉进程(转发端口),ruby,oracle,ssh,Ruby,Oracle,Ssh,我在本地计算机上安装了Oracle瘦客户机,以便在远程主机上执行SQL命令。 此外,我还有一个Ruby脚本,其中包含使用OCI8GEM的SQL命令,并且该脚本工作正常 但是,要运行SQL命令,我需要打开一个隧道,转发到远程Oracle正在侦听的端口: ssh -L 1521:localhost:1521 <user>@<host> 然而,隧道并没有被摧毁 有没有一种方法可以从Ruby脚本中杀死/终止隧道?HUP信号不会杀死进程,它只是向进程发送一个信号,而该进程可以随意

我在本地计算机上安装了Oracle瘦客户机,以便在远程主机上执行SQL命令。 此外,我还有一个Ruby脚本,其中包含使用OCI8GEM的SQL命令,并且该脚本工作正常

但是,要运行SQL命令,我需要打开一个隧道,转发到远程Oracle正在侦听的端口:

ssh -L 1521:localhost:1521 <user>@<host>
然而,隧道并没有被摧毁

有没有一种方法可以从Ruby脚本中杀死/终止隧道?

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

你想要的是:

Process.kill('INT', tunnel)
对于礼貌提问不起作用的情况,更具攻击性的版本是:

Process.kill('KILL', tunnel)

谢谢你的信息。然而,你的解决方案没有奏效,隧道仍在开放。当然,我仍然可以在远程oracle数据库instanceAh上成功运行ruby脚本并运行sql命令。f选项创建了一个子流程,如果不跟踪该子流程所具有的PID,则无法终止该子流程,它将被分离。如果可以避免-f,则可以直接管理隧道。感谢更新。塔德曼。现在我找到了一个解决方法,仍然使用-f,但我删除了-N标志,而是传递了一个sleep值exec ssh-f@-L 1521:localhost:1521 sleep 60。通过这种方式创建隧道,但在达到睡眠时间后终止。
Process.kill('INT', tunnel)
Process.kill('KILL', tunnel)