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

时间:2019-03-06 15:18:22

标签: bash kdb

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

例如

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

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

下面是我的步骤:

我尝试过:

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]$ 

但是似乎进程仍在运行

[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

3 个答案:

答案 0 :(得分:1)

您应该阅读更多有关后台进程和前台进程如何在Shell中运行的信息。基本上,您并不是在命令末尾添加&来分离,它仍然取决于您的shell和您的输入。

Here是有关在不同情况下应使用的内容的详尽说明。

  • 运行command &只是将命令发送到bg,以便您可以继续使用终端
  • 如果要保持进程独立于外壳运行(将nohup command & > /dev/null替换为所需的任何文件),运行/dev/null是最安全的组合。

另请参阅作业控制命令。 TLDP具有good article

答案 1 :(得分:0)

尝试添加

nohup

在您执行命令之前

答案 2 :(得分:0)

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

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

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

使用'nohup'命令,以便即使关闭终端后进程仍将继续运行。

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

现在,您可以从其他kdb服务开始连接:

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