Какой хороший способ запустить другой экземпляр работающей программы, используя Golang? - PullRequest
0 голосов
/ 10 февраля 2019

Я бы хотел, чтобы программа Go запускала несколько процессов, с которыми она будет взаимодействовать.(Я также не определился с тем, какой метод IPC использовать, но, возможно, это другой вопрос)затем пакет exec для запуска нового экземпляра программы.Интересно, есть ли другой способ сделать это без необходимости запрашивать путь к исполняемому файлу, или это даже поведение, о котором я должен беспокоиться.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вы правы, чтобы выполнить другой экземпляр запущенной программы, которую вы можете использовать os.Executable():

path, err := os.Executable()
if err != nil {
    log.Println(err)
}
cmd := exec.Command(path)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Start()
if err != nil {
    log.Println(err)
}

Я не знаю ваш сценарий, однако это не очень распространено.

Если вы не думаете о создании дочернего элемента (как форк / exec), возможно, вам придется передать дополнительные файловые дескрипторы с помощью cmd.ExtraFiles дочернему элементу и комбинацию обмена сигналами для создания дочернего элемента или завершения.родитель (обычно SIGUSR1 и SIGTERM)

0 голосов
/ 10 февраля 2019

Использование os.Executable - это рекомендуемый способ найти собственный путь вашей программы в последней версии Go (, подробности см. В этом более старом SO-ответе ).И затем вы можете использовать exec.Command для запуска нескольких экземпляров.

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

...