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

Pio*_*ski 4 bash kdb

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

例如

q tick.q sym /mnt/disks/disk1/OnDiskDB/ -p 5000
Run Code Online (Sandbox Code Playgroud)

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

以下是我的步骤:

我试过:

q tick.q sym /mnt/disks/disk1/OnDiskDB/ -p 5000 &
Run Code Online (Sandbox Code Playgroud)

但然后我必须手动按 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]$ 
Run Code Online (Sandbox Code Playgroud)

但进程似乎仍在运行

[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
Run Code Online (Sandbox Code Playgroud)

现在关闭终端

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

[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
Run Code Online (Sandbox Code Playgroud)

bru*_*rey 7

您应该更多地了解后台和前台进程如何在 shell 中运行。基本上,您不会通过&在命令末尾添加 a 来分离,它仍然取决于您的 shell 和您的输入。

以下是关于在不同情况下应该使用什么的详细说明。

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

另请阅读有关作业控制命令的信息。TLDP 有一篇好文章