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

Функция syscall.ForkExec

Функция syscall.ForkExec создает новый процесс, выполняя системные вызовы fork и exec. В первый параметр передается путь к исполняемому файлу, во второй - аргументы командной строки в виде слайса строк, в третий - атрибуты процесса. Функция возвращает идентификатор нового процесса и ошибку, если таковая возникла.

Синтаксис

pid, err := syscall.ForkExec(path, args, attr)

Пример 1

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

package main import ( "fmt" "syscall" ) func main() { path := "/bin/echo" args := []string{"echo", "hello world"} attr := &syscall.ProcAttr{ Dir: "", Env: []string{}, Files: []uintptr{0, 1, 2}, } pid, err := syscall.ForkExec(path, args, attr) if err != nil { fmt.Println("error:", err) } else { fmt.Println("pid:", pid) } }

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

hello world pid: 12345

Пример 2

Давайте создадим новый процесс для выполнения команды 'ls' с аргументом '-la':

package main import ( "fmt" "syscall" ) func main() { path := "/bin/ls" args := []string{"ls", "-la"} attr := &syscall.ProcAttr{ Dir: "/tmp", Env: []string{"USER=go"}, Files: []uintptr{0, 1, 2}, } pid, err := syscall.ForkExec(path, args, attr) if err != nil { fmt.Println("error:", err) } else { fmt.Println("pid:", pid) } }

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

total 0 drwxrwxrwt 1 root root 4096 Sep 4 10:00 . drwxr-xr-x 1 root root 4096 Sep 4 09:55 .. pid: 12346

Пример 3

Давайте создадим новый процесс для выполнения команды 'sleep' с аргументом '2' и подождем его завершения:

package main import ( "fmt" "syscall" "time" ) func main() { path := "/bin/sleep" args := []string{"sleep", "2"} attr := &syscall.ProcAttr{ Dir: "", Env: []string{}, Files: []uintptr{0, 1, 2}, } pid, err := syscall.ForkExec(path, args, attr) if err != nil { fmt.Println("error:", err) } else { fmt.Println("pid:", pid) process, _ := os.FindProcess(pid) state, _ := process.Wait() fmt.Println("process state:", state) } }

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

pid: 12347 process state: exit status 0

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

  • функцию syscall.Exec,
    которая заменяет текущий процесс новой программой
  • функцию syscall.Kill,
    которая отправляет сигнал процессу
  • функцию os.StartProcess,
    которая запускает новый процесс с указанными атрибутами
  • функцию exec.Command,
    которая предоставляет более высокоуровневый API для запуска команд
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить