Функция os.StartProcess
Функция os.StartProcess запускает новый процесс,
используя переданные параметры. Первым аргументом
она принимает путь к исполняемому файлу.
Вторым аргументом передается срез строк с аргументами
командной строки (первый элемент должен быть именем программы).
Третий аргумент - структура os.ProcAttr,
которая задает атрибуты процесса, такие как переменные среды,
рабочий каталог и файловые дескрипторы.
Функция возвращает указатель на os.Process и ошибку.
Синтаксис
os.StartProcess(name string, argv []string, attr *os.ProcAttr) (*os.Process, error)
Пример
Давайте запустим команду echo с аргументом "hello world"
и выведем информацию о процессе:
package 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)
}
Результат выполнения кода:
"hello world"
"Process PID: 12345"
Пример
Давайте запустим команду ls для вывода списка файлов
в текущем каталоге и обработаем ошибку:
package 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())
}
Результат выполнения кода:
"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,
которая предоставляет более высокоуровневый интерфейс для запуска команд