РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1431 of 1593 menu

Метод os.Process.Wait

Метод os.Process.Wait ожидает завершения процесса, после чего возвращает структуру os.ProcessState, содержащую информацию о завершении процесса, и ошибку, если таковая возникла. Метод блокирует выполнение программы до тех пор, пока процесс не завершится.

Синтаксис

state, err := process.Wait()

Пример

Давайте запустим внешнюю команду с помощью os.StartProcess и дождемся ее завершения:

package main import ( "fmt" "os" ) func main() { attr := &os.ProcAttr{ Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, } process, err := os.StartProcess("/bin/echo", []string{"echo", "Hello, World!"}, attr) if err != nil { fmt.Println("Error starting process:", err) return } state, err := process.Wait() if err != nil { fmt.Println("Error waiting process:", err) return } fmt.Println("Process finished:", state.Exited()) }

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

"Hello, World!" "Process finished: true"

Пример

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

package main import ( "fmt" "os" ) func main() { attr := &os.ProcAttr{ Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, } process, err := os.StartProcess("/bin/sh", []string{"sh", "-c", "exit 42"}, attr) if err != nil { fmt.Println("Error starting process:", err) return } state, err := process.Wait() if err != nil { fmt.Println("Error waiting process:", err) return } fmt.Println("Exit code:", state.ExitCode()) }

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

"Exit code: 42"

Пример

Метод os.Process.Wait также может использоваться в связке с методом os.Process.Kill для ожидания принудительного завершения процесса:

package main import ( "fmt" "os" "time" ) func main() { attr := &os.ProcAttr{ Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, } process, err := os.StartProcess("/bin/sh", []string{"sh", "-c", "sleep 10"}, attr) if err != nil { fmt.Println("Error starting process:", err) return } go func() { time.Sleep(2 * time.Second) err := process.Kill() if err != nil { fmt.Println("Error killing process:", err) } }() state, err := process.Wait() if err != nil { fmt.Println("Error waiting process:", err) return } fmt.Println("Process exited:", state.Exited()) fmt.Println("Success:", state.Success()) }

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

"Process exited: true" "Success: false"

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

  • метод os.Process.Kill,
    который принудительно завершает процесс
  • метод os.Process.Signal,
    который отправляет сигнал процессу
  • метод os.Process.Release,
    который освобождает ресурсы процесса
  • метод os.ProcessState.ExitCode,
    который возвращает код завершения процесса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить