Задать вопрос
hitakiri
@hitakiri

Как можно отслеживать завершение запушенного процесса в Go?

Есть срез строк, из пути к файлам различного разрешения (.doc, pdf, .dwg, .step и т.д.)
Их необходимо запускать в очерёдности в которой они записаны в срез, только после того как будет завершен предыдущий процесс. Собственно возникает вопрос - как корректно отслеживать завершение процессов различных программ и есть ли более функциональные способы отслеживания работы стороннего процесса?

На данный момент отслеживаю с помощью cmd.Wait :

func start(r []string) {
	start := false

	for i := range r {
		cmd := exec.Command("cmd", "/C "+r[i])
		cmd.Start()
		err := cmd.Wait()
		for !start {

			var waitStatus syscall.WaitStatus

				if err != nil {
					os.Stderr.WriteString(fmt.Sprintf("Error: %s\n", err.Error()))
				}
				if exitError, ok := err.(*exec.ExitError); ok {
					waitStatus = exitError.Sys().(syscall.WaitStatus)
					fmt.Printf("Output: %s\n", []byte(fmt.Sprintf("%d", waitStatus.ExitStatus())))
				}
			} else {
				waitStatus = cmd.ProcessState.Sys().(syscall.WaitStatus)
				fmt.Printf("Output: %s\n", []byte(fmt.Sprintf("%d", waitStatus.ExitStatus())))
				start = true
			}
		}
}
  • Вопрос задан
  • 184 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
cmd.Wait() вполне себе верный способ.
Если нужно видеть ответ команды, то самый простой способ, это использовать exec.Command(.....).CombinedOutput()
Он и ответ вернёт и подождёт завершения команды.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы