Метод exec.Cmd.Wait
Метод exec.Cmd.Wait ожидает завершения процесса,
запущенного с помощью exec.Cmd.Start. Он возвращает
ошибку, если процесс завершился с ненулевым кодом выхода,
или nil, если процесс завершился успешно.
Метод должен быть вызван после Start и освобождает
ресурсы, связанные с процессом.
Синтаксис
cmd.Wait()
Пример
Давайте запустим команду echo и дождемся ее завершения:
package 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")
}
}
Результат выполнения кода:
"Command finished successfully"
Пример
Давайте запустим команду, которая завершится с ошибкой, и обработаем эту ситуацию:
package 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")
}
}
Результат выполнения кода:
"Command finished with error: exit status 1"
Пример
Давайте получим информацию о состоянии процесса с помощью
ProcessState:
package 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())
}
Результат выполнения кода:
"PID: 12345"
"Exited: true"
"System time: 1.234ms"
"User time: 1.234ms"
Смотрите также
-
метод
exec.Cmd.Start,
который запускает процесс -
метод
exec.Cmd.Run,
который запускает процесс и ожидает его завершения -
метод
exec.Cmd.Output,
который возвращает стандартный вывод процесса -
метод
os.Process.Wait,
который ожидает завершения процесса