Метод exec.Cmd.Wait

Метод exec.Cmd.Wait ожидает завершения процесса, запущенного с помощью exec.Cmd.Start. Он возвращает ошибку, если процесс завершился с ненулевым кодом выхода, или nil, если процесс завершился успешно. Метод должен быть вызван после Start и освобождает ресурсы, связанные с процессом.

Синтаксис

gocmd.Wait()

Пример

Давайте запустим команду echo и дождемся ее завершения:

gopackage main

import (
  "exec"
  "fmt"
)

func main() {
  cmd := exec.Command("echo", "Hello, World!")
  err := cmd.Start()
  if err != nil {
    fmt.Println("Error starting command:", err)
    return
  }

  err = cmd.Wait()
  if err != nil {
    fmt.Println("Command finished with error:", err)
  } else {
    fmt.Println("Command finished successfully")
  }
}

Результат выполнения кода:

go"Command finished successfully"

Пример

Давайте запустим команду, которая завершится с ошибкой, и обработаем эту ситуацию:

gopackage main

import (
  "exec"
  "fmt"
)

func main() {
  cmd := exec.Command("false")
  err := cmd.Start()
  if err != nil {
    fmt.Println("Error starting command:", err)
    return
  }

  err = cmd.Wait()
  if err != nil {
    fmt.Println("Command finished with error:", err)
  } else {
    fmt.Println("Command finished successfully")
  }
}

Результат выполнения кода:

go"Command finished with error: exit status 1"

Пример

Давайте получим информацию о состоянии процесса с помощью ProcessState:

gopackage main

import (
  "exec"
  "fmt"
)

func main() {
  cmd := exec.Command("echo", "test")
  err := cmd.Start()
  if err != nil {
    fmt.Println("Error starting command:", err)
    return
  }

  err = cmd.Wait()
  if err != nil {
    fmt.Println("Command finished with error:", err)
    return
  }

  state := cmd.ProcessState
  fmt.Println("PID:", state.Pid())
  fmt.Println("Exited:", state.Exited())
  fmt.Println("System time:", state.SystemTime())
  fmt.Println("User time:", state.UserTime())
}

Результат выполнения кода:

go"PID: 12345"
"Exited: true"
"System time: 1.234ms"
"User time: 1.234ms"

Смотрите также

  • метод exec.Cmd.Start,
    который запускает процесс
  • метод exec.Cmd.Run,
    который запускает процесс и ожидает его завершения
  • метод exec.Cmd.Output,
    который возвращает стандартный вывод процесса
  • метод os.Process.Wait,
    который ожидает завершения процесса