我正在尝试在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
答案 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