Функция os.StartProcess

Функция os.StartProcess запускает новый процесс, используя переданные параметры. Первым аргументом она принимает путь к исполняемому файлу. Вторым аргументом передается срез строк с аргументами командной строки (первый элемент должен быть именем программы). Третий аргумент - структура os.ProcAttr, которая задает атрибуты процесса, такие как переменные среды, рабочий каталог и файловые дескрипторы. Функция возвращает указатель на os.Process и ошибку.

Синтаксис

goos.StartProcess(name string, argv []string, attr *os.ProcAttr) (*os.Process, error)

Пример

Давайте запустим команду echo с аргументом "hello world" и выведем информацию о процессе:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  attr := &os.ProcAttr{
    Files: []*os.File{os.Stdin, os.Stdout, os.Stderr},
  }
  proc, err := os.StartProcess("/bin/echo", []string{"echo", "hello world"}, attr)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Println("Process PID:", proc.Pid)
}

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

go"hello world"
"Process PID: 12345"

Пример

Давайте запустим команду ls для вывода списка файлов в текущем каталоге и обработаем ошибку:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  attr := &os.ProcAttr{
    Files: []*os.File{os.Stdin, os.Stdout, os.Stderr},
    Dir:   ".",
  }
  proc, err := os.StartProcess("/bin/ls", []string{"ls", "-l"}, attr)
  if err != nil {
    fmt.Println("Failed to start process:", err)
    return
  }
  state, err := proc.Wait()
  if err != nil {
    fmt.Println("Process error:", err)
    return
  }
  fmt.Println("Process exited with:", state.ExitCode())
}

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

go"total 0"
"-rw-r--r-- 1 user user 0 date file1.txt"
"-rw-r--r-- 1 user user 0 date file2.txt"
"Process exited with: 0"

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

  • функцию os.Process,
    которая представляет запущенный процесс
  • функцию os.Process.Wait,
    которая ожидает завершения процесса
  • функцию os.Process.Kill,
    которая завершает процесс принудительно
  • функцию exec.Command,
    которая предоставляет более высокоуровневый интерфейс для запуска команд