Запуск процесса портит оболочку - PullRequest
0 голосов
/ 15 апреля 2020

Мне нужно запустить процесс под названием osqueryi перед тем, как запустить приложение, и при завершении работы убить этот процесс. (Это своего рода демон, к которому можно обратиться. Мне нужно, чтобы он работал для того, чтобы мое приложение работало). 1006 *.

В хуке PersistentPostRun я просто закрыл его:

func shutdown() {
  if osqueryi != nil {
    osqueryi.Kill()
  }
}

Osqueryi похож на интерактивную оболочку. Он должен быть передан os.Stdin, потому что, очевидно, он использует isatty. Если я этого не сделаю, он не запустится. Поэтому мне нужно начать этот процесс, потому что мне нужно запрашивать его, но мне не нужно записывать какие-либо входные данные, потому что идея состоит в том, чтобы использовать go модуль osquery-go для выдачи запросов из моего приложения ...

Мне нужно вызвать его в подпрограмме go, потому что в противном случае я не могу записать вывод журнала на экран ...

В любом случае, это вроде хорошо работает. НО, когда приложение закрывается, мой терминал не работает: моя строка подсказки отсутствует (не вижу, что я печатаю). Я предполагаю, потому что я назначаю это STDIN, но я никогда не пишу в него, и в то же время пишу вывод в STDOUT через fmt.Println().

Есть ли способ заставить эту работу?

1 Ответ

1 голос
/ 15 апреля 2020

Вы пометили osquery, так что ... Возможно, в качестве альтернативы, не запускайте osqueryi таким образом, его нельзя использовать таким образом.

Общая рекомендация - использовать osqueryd с конфигурацией так, как вам нравится. Или, если вы действительно хотите один вызов osqueryi, вы можете вызвать его с помощью запроса из командной строки, вывод в json:

osqueryi --json "select 1"
[
  {"1":"1"}
]

osqueryi на самом деле не совпадает с osqueryd.

...