Тип os.ProcessState
Тип os.ProcessState содержит информацию о состоянии завершенного процесса.
Он возвращается методами Wait и Wait объекта os.Process.
Этот тип предоставляет методы для получения кода завершения процесса, времени его выполнения,
а также информации об использовании системных ресурсов.
Основные методы
Тип os.ProcessState предоставляет следующие основные методы:
Exited - проверяет, завершился ли процесс,
ExitCode - возвращает код завершения процесса,
Success - проверяет, завершился ли процесс успешно (с кодом 0),
Sys - возвращает системную информацию о процессе,
SysUsage - возвращает информацию об использовании ресурсов,
UserTime - возвращает время, затраченное процессом в пользовательском режиме,
SystemTime - возвращает время, затраченное процессом в системном режиме,
Pid - возвращает идентификатор процесса.
Синтаксис
type ProcessState struct {
// содержит скрытые поля
}
Пример получения кода завершения
Давайте запустим процесс и получим его код завершения:
package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
cmd := exec.Command("ls", "/")
err := cmd.Run()
if err != nil {
if exitError, ok := err.(*exec.ExitError); ok {
state := exitError.ProcessState
fmt.Printf("Process exited with code: %d\n", state.ExitCode())
fmt.Printf("Success: %v\n", state.Success())
fmt.Printf("Exited: %v\n", state.Exited())
}
} else {
state := cmd.ProcessState
fmt.Printf("Process exited with code: %d\n", state.ExitCode())
fmt.Printf("Success: %v\n", state.Success())
}
}
Результат выполнения кода:
"Process exited with code: 0"
"Success: true"
"Exited: true"
Пример получения времени выполнения
Давайте получим информацию о времени выполнения процесса:
package main
import (
"fmt"
"os/exec"
"time"
)
func main() {
start := time.Now()
cmd := exec.Command("sleep", "1")
err := cmd.Run()
if err == nil {
state := cmd.ProcessState
userTime := state.UserTime()
systemTime := state.SystemTime()
fmt.Printf("User time: %v\n", userTime)
fmt.Printf("System time: %v\n", systemTime)
fmt.Printf("Total time: %v\n", time.Since(start))
}
}
Результат выполнения кода:
"User time: 5ms"
"System time: 2ms"
"Total time: 1.05s"
Пример получения системной информации
Давайте получим системную информацию о процессе:
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("echo", "hello")
err := cmd.Run()
if err == nil {
state := cmd.ProcessState
sysInfo := state.Sys()
fmt.Printf("System info: %v\n", sysInfo)
fmt.Printf("PID: %d\n", state.Pid())
}
}
Результат выполнения кода:
"System info: &{32683 0 0 0}"
"PID: 32683"
Пример обработки ошибки выполнения
Давайте обработаем случай, когда процесс завершается с ошибкой:
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("false")
err := cmd.Run()
if err != nil {
if exitError, ok := err.(*exec.ExitError); ok {
state := exitError.ProcessState
fmt.Printf("Error occurred: %v\n", err)
fmt.Printf("Exit code: %d\n", state.ExitCode())
fmt.Printf("Success: %v\n", state.Success())
}
}
}
Результат выполнения кода:
"Error occurred: exit status 1"
"Exit code: 1"
"Success: false"
Смотрите также
-
тип
os.Process,
который представляет запущенный процесс и позволяет управлять им -
метод
os.Process.Wait,
который ожидает завершения процесса и возвращает его состояние -
тип
exec.ExitError,
который представляет ошибку завершения процесса с ненулевым кодом -
метод
exec.Cmd.Run,
который запускает команду и ожидает ее завершения