6

我需要终止一个远程 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

4 回答 4

8

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

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

q)h: hopen `::5000
q)(neg h) (exit;0)
q)\\
于 2013-02-05T03:08:02.067 回答
4

我设法通过使用受保护的评估来解决这个问题:

test.q文件中:

h: hopen `::5000
@[h; "exit 0"; {}]
\\
于 2013-02-06T22:27:55.730 回答
0

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

h: hopen `:hostname:port  <BR>
h <BR>
h:hclose <BR>
h<BR>
于 2019-06-12T14:14:57.017 回答
0

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

于 2019-04-19T09:11:32.183 回答