kdb + - как запустить процесс без блокировки терминала в linux - PullRequest
1 голос
/ 06 марта 2019

Я пытаюсь запустить несколько процессов в Linux kdb + (TP, RDB, HDB)

например,

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 ]

1 голос
/ 06 марта 2019

Вы должны прочитать немного больше о том, как фоновые и передние процессы выполняются в оболочке. По сути, вы не отсоединяетесь, добавляя & в конце своей команды, это все еще зависит от вашей оболочки и вашего ввода.

Здесь представляет собой краткое объяснение того, что вы должны использовать для различных случаев.

  • Запуск command & просто отправляет команду bg, чтобы вы могли продолжать использовать свой терминал
  • Запуск nohup command & > /dev/null - самая безопасная комбинация, если вы хотите, чтобы ваш процесс работал независимо от вашей оболочки (замените /dev/null на любой файл, который вы хотите).

Также читайте о командах управления заданиями. У TLDP есть хорошая статья .

0 голосов
/ 07 марта 2019

Эта проблема больше связана с Unix / Shell, чем с KDB, как уже упоминалось другими. Ниже приведено одно решение, которое вы можете попробовать.

Когда вы отправляете процесс в фоновый режим, и если этот процесс все еще ожидает ввода от терминала, он переходит в остановленное состояние . В этом случае он не примет запрос от другого процесса KDB. И это то, что вы видите.

Чтобы это исправить, вам нужно изменить стандартный ввод, чтобы отключить вход терминала. Команда ниже перенаправляет вывод в некоторый файл журнала, а также меняет стандартный ввод на /dev/null.

.

Команда nohup используется для того, чтобы процесс продолжал выполняться даже после закрытия терминала.

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

Теперь вы можете легко подключиться к другому сервису kdb:

 q)h:hopen `::5000
 q)h ".z.K"
 q)3.5
0 голосов
/ 06 марта 2019

Попробуйте добавить

nohup

перед вашими командами

...