Когда я должен вызывать cmd.Process.Release () явно? - PullRequest
0 голосов
/ 04 июля 2019

Я не мог знать, когда команда вернет результат, и установлен таймер по умолчанию. Тогда у меня есть этот вопрос.

sigChan := make(os.Signal, 1)
signal.Notify(sigChan, SIGCHLD)
cmd := exec.Command(...)
cmd.Start()
select {
    case <-time.After(1e9):
    // kill the process and release?
    case <-sigChan:
    // the process has been terminated
}

1 Ответ

0 голосов
/ 04 июля 2019

Используйте exec.CommandContext(), если вы хотите прервать выполнение команды после истечения времени ожидания.

Затем вам нужно подождать, пока команда вернется, чтобы получить свой результат. Итак, используйте cmd.Run() вместо cmd.Start(). Если проблема связана с блокировкой, создайте программу, которая блокирует и ожидает завершения команды.

Например:

go func() {
    ctx, cancel := context.WithTimeout(context.Background(), 100*time.Second)
    defer cancel()
    cmd := exec.CommandContext(ctx, ...)
    err := cmd.Run()
    //Process error or results
}()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...