kdb+ - 如何在不阻塞终端的情况下启动进程 linux

kdb+ - how to start process without blocking the terminal in linux

我正在尝试 运行 kdb+(TP、RDB、HDB)linux 上的几个进程

例如

q tick.q sym /mnt/disks/disk1/OnDiskDB/ -p 5000

我遇到的问题是我必须保持终端打开以保持 q 个进程 运行ning

以下是我的步骤:

我试过了:

q tick.q sym /mnt/disks/disk1/OnDiskDB/ -p 5000 &

但是我必须手动按下 enter 退出 q 提示符(可能仍然可以),一些关于进程的信息停止,然后我关闭终端

[piotr@server tick-example]$ q tick.q sym /mnt/disks/disk1/OnDiskDB/ -p 5000 &
[1] 6627
[piotr@server tick-example]$ KDB+ 3.6 .....
q)    (enter)
[piotr@server tick-example]$   (hitting enter)
[piotr@server tick-example]$  (hitting enter)
[1]+  Stopped                 q tick.q sym mnt/disks/disk1/OnDiskDB/ -p 5000
[piotr@server tick-example]$ 

不过好像进程还在运行ning

[piotr@server tick-example]$ ps -efww | grep tick
piotr    6627  6408  0 14:55 pts/7    00:00:00 q tick.q sym /mnt/disks/disk1/OnDiskDB/ -p 5000

现在关闭终端

正在打开另一个终端进行验证:

[piotr@server tick-example]$q
...
q)h:hopen `::5000
'hop. OS reports: Connection refused
  [0]  h:hopen `::5000
q)\
[piotr@server tick-example]$ ps -efww | grep tick
...
nothing

尝试添加

nohup

在你的命令之前

您应该阅读更多有关 shell 中后台和前台处理 运行 的信息。基本上,您不会通过在命令末尾添加 & 来分离,它仍然取决于您的 shell 和您的输入。

Here 是关于在不同情况下应该使用什么的切中要点的解释。

  • 运行 command & 只需将命令发送到 bg,这样您就可以继续使用您的终端
  • 运行 nohup command & > /dev/null 是最安全的组合,如果你想让你独立于 shell 处理 运行ning(用任何文件替换 /dev/null你想要)。

另请阅读作业控制命令。 TLDP 有 good article.

这个问题比其他人已经提到的 KDB 更 unix/shell 相关。以下是您可以尝试的一种解决方案。

当您将进程发送到后台时,如果该进程仍在等待来自终端的输入,那么它会进入 停止状态。在那种情况下,它不会接受来自其他 KDB 进程的请求。这就是您所看到的。

要解决此问题,您需要更改标准输入以分离终端输入。下面的命令将输出重定向到某个日志文件,并将标准输入更改为 /dev/null.

使用

'nohup' 命令,即使终端关闭后进程仍将保持 运行。

nohup q -p 5000 >output.log </dev/null &

现在您可以轻松地从其他 kdb 服务连接:

 q)h:hopen `::5000
 q)h ".z.K"
 q)3.5