當前位置: 首頁>>編程語言>>正文


Go語言教程:執行進程

返回Go語言教程首頁

概念簡介

在前麵的例子中,我們了解了生成外部進程](../spawning-processes/)
的知識,當我們需要訪問外部進程時需要這樣做,但是有時候,我們隻想
用其他的(也許是非 Go 程序)來完全替代當前的 Go 進程。這時候,我們
可以使用經典的 exec
方法的 Go 實現。

例程代碼


package main

import "syscall"
import "os"
import "os/exec"

func main() {

    // 在我們的例子中,我們將執行 `ls` 命令。Go 需要提供我
    // 們需要執行的可執行文件的絕對路徑,所以我們將使用
    // `exec.LookPath` 來得到它(大概是 `/bin/ls`)。
    binary, lookErr := exec.LookPath("ls")
    if lookErr != nil {
        panic(lookErr)
    }

    // `Exec` 需要的參數是切片的形式的(不是放在一起的一個大字
    // 符串)。我們給 `ls` 一些基本的參數。注意,第一個參數需要
    // 是程序名。
    args := []string{"ls", "-a", "-l", "-h"}

    // `Exec` 同樣需要使用[環境變量](environment-variables.html)。
    // 這裏我們僅提供當前的環境變量。
    env := os.Environ()

    // 這裏是 `syscall.Exec` 調用。如果這個調用成功,那麽我們的
    // 進程將在這裏被替換成 `/bin/ls -a -l -h` 進程。如果存
    // 在錯誤,那麽我們將會得到一個返回值。
    execErr := syscall.Exec(binary, args, env)
    if execErr != nil {
        panic(execErr)
    }
}

執行&輸出


# 當我們運行程序時,它會替換為 `ls`。
$ go run execing-processes.go
total 16
drwxr-xr-x  4 mark 136B Oct 3 16:29 .
drwxr-xr-x 91 mark 3.0K Oct 3 12:50 ..
-rw-r--r--  1 mark 1.3K Oct 3 16:28 execing-processes.go

# 注意 Go 並不提供一個經典的 Unix `fork` 函數。通常這不
# 是個問題,因為運行 Go 協程,生成進程和執行進程覆蓋了
# fork 的大多數使用場景。

課程導航

學習上一篇:Go語言教程:生成進程    學習下一篇:Go語言教程:信號

相關資料

本例程github源代碼:https://github.com/xg-wang/gobyexample/tree/master/examples/execing-processes
Go執行進程

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/3977.html,未經允許,請勿轉載。