我需要杀死一个远程KDB + session 。这可以通过多种方式完成,但我更喜欢使用IPC处理程序。

我开始一个KDB + session :

$ q -p 5000
KDB+ 3.0 2012.11.13 Copyright (C) 1993-2012 Kx Systems

然后,我开始另一个KDB session ,并成功杀死了服务器:
$ 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进入 Debug模式。

如果只想将导出发送到远程服务器而不会引起错误,则可以通过对连接句柄使用负值来异步发送请求(请注意,缺少“关闭错误”):

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

10-07 16:15