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



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

但是,要运行 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 脚本中终止/终止隧道?

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

你想要的是:

Process.kill('INT', tunnel)

对于礼貌询问不起作用的情况,一个更激进的版本:

Process.kill('KILL', tunnel)

最新更新