如何终止远程KDB+;通过脚本进行会话?
我需要终止一个远程KDB+会话。这可以通过几种方式完成,但我更喜欢使用IPC处理程序 我启动KDB+会话:如何终止远程KDB+;通过脚本进行会话?,kdb,Kdb,我需要终止一个远程KDB+会话。这可以通过几种方式完成,但我更喜欢使用IPC处理程序 我启动KDB+会话: $ q -p 5000 KDB+ 3.0 2012.11.13 Copyright (C) 1993-2012 Kx Systems 然后,我启动另一个KDB会话,并成功终止服务器: $ q KDB+ 3.0 2012.11.13 Copyright (C) 1993-2012 Kx Systems q)h: hopen `::5000 q)h(exit;0) 'close q)\\
$ q -p 5000
KDB+ 3.0 2012.11.13 Copyright (C) 1993-2012 Kx Systems
然后,我启动另一个KDB会话,并成功终止服务器:
$ q
KDB+ 3.0 2012.11.13 Copyright (C) 1993-2012 Kx Systems
q)h: hopen `::5000
q)h(exit;0)
'close
q)\\
但是,如果我使用上述指令创建脚本(test.q),它将失败:
$ cat test.q
h: hopen `::5000
h(exit;0)
\\
$ q test.q
KDB+ 3.0 2012.11.13 Copyright (C) 1993-2012 Kx Systems
k){0N!x y}
'close
@
"q"
"h(exit;0)"
q))
有什么想法吗?我真的很感激 您正在向远程服务器发出同步请求,这意味着您需要响应。问题是您的请求会导致远程服务器关闭并立即关闭连接,从而导致错误并导致q进入调试模式 如果您只想向远程服务器发送出口而不引起错误,则可以使用连接句柄的负值异步发送请求(请注意缺少“关闭错误”):
我通过以下方法解决了这个问题: 在test.q文件中:
h: hopen `::5000
@[h; "exit 0"; {}]
\\
您可能想尝试异步。如果需要,也可以尝试延迟异步
(neg h)({exit 0};`)[]您可以选择显式关闭会话并放弃句柄:
h: hopen `:hostname:port <BR>
h <BR>
h:hclose <BR>
h<BR>
h:hopen`:hostname:port
h
h:hclose
h
我已经尝试了一个异步调用,没有抛出错误,但它也没有关闭服务器。请记住,代码应该从脚本运行,而不是以交互模式运行;(在Windows上)它似乎对我很好。将protected eval与同步调用一起使用会起作用,但也会产生副作用,即在等待远程进程关闭时挂起客户端。如果要关闭很多进程,这可能会很糟糕。
h: hopen `:hostname:port <BR>
h <BR>
h:hclose <BR>
h<BR>