如何通过脚本终止远程KDB +会话?

时间:2013-02-04 16:19:24

标签: 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)\\

但是,如果我按照上面的说明创建一个脚本(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))

有什么想法吗?我真的很感激。

4 个答案:

答案 0 :(得分:5)

您正在向远程服务器发出同步请求,这意味着您需要响应。问题是您的请求导致远程服务器立即关闭并关闭连接,从而导致错误并导致q进入调试模式。

如果您只想在不引起错误的情况下向远程服务器发送退出,则可以使用连接句柄的负值异步发送请求(请注意缺少“关闭错误”):

q)h: hopen `::5000
q)(neg h) (exit;0)
q)\\

答案 1 :(得分:2)

我设法使用Protected Evaluation

对此进行排序

test.q 文件中:

h: hopen `::5000
@[h; "exit 0"; {}]
\\

答案 2 :(得分:0)

您可能想尝试异步。另外,如果需要,您可以尝试延迟异步 (neg h)({exit 0};`)[]

答案 3 :(得分:0)

您可以选择显式关闭会话并丢弃句柄:

h: hopen `:hostname:port  <BR>
h <BR>
h:hclose <BR>
h<BR>