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
我正在尝试 运行 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