# Go 進程執行
在上面的例子中,我們演示了一下如何去觸發執行一個外部的進程。我們這樣做的原因是我們希望從Go進程里面可以訪問外部進程的信息。但有的時候,我們僅僅希望執行一個外部進程來替代當前的Go進程。這個時候,我們需要使用Go提供的`exec`函數。
```go
package main
import "syscall"
import "os"
import "os/exec"
func main() {
// 本例中,我們使用`ls`來演示。Go需要一個該命令
// 的完整路徑,所以我們使用`exec.LookPath`函數來
// 找到它
binary, lookErr := exec.LookPath("ls")
if lookErr != nil {
panic(lookErr)
}
// `Exec`函數需要一個切片參數,我們給ls命令一些
// 常見的參數。注意,第一個參數必須是程序名稱
args := []string{"ls", "-a", "-l", "-h"}
// `Exec`還需要一些環境變量,這里我們提供當前的
// 系統環境
env := os.Environ()
// 這里是`os.Exec`調用。如果一切順利,我們的原
// 進程將終止,然后啟動一個新的ls進程。如果有
// 錯誤發生,我們將獲得一個返回值
execErr := syscall.Exec(binary, args, env)
if execErr != nil {
panic(execErr)
}
}
```
運行結果
```
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函數。通常這也不是一個問題,因為進程觸發和進程執行已經覆蓋了fork的大多數功能。
- 版權
- 內容
- Go常量
- Go變量
- Go 數值
- Go 數組
- Go 字典
- Go 函數定義
- Go 方法
- Go 結構體
- Go 閉包函數
- Go 接口
- Go 字符串操作函數
- Go 字符串格式化
- Go 自定義排序
- Go Base64編碼
- Go Defer
- Go Exit.md
- Go for循環
- Go if..else if..else 條件判斷
- Go JSON支持
- Go Line Filters
- Go 狀態協程
- Go Panic
- Go range函數
- Go SHA1 散列
- Go String與Byte切片之間的轉換
- Go Switch語句
- Go URL解析
- Go 遍歷通道
- Go 并行功能
- Go 并行通道Channel
- Go 超時
- Go 錯誤處理
- Go 打點器
- Go 遞歸函數
- Go 讀取文件
- Go 工作池
- Go 關閉通道
- Go 函數多返回值
- Go 函數回調
- Go 函數命名返回值
- Go 互斥
- Go 環境變量
- Go 集合功能
- Go 計時器
- Go 進程觸發
- Go 進程執行
- Go hello world
- Go 可變長參數列表
- Go 命令行參數
- Go 命令行參數標記
- Go 排序
- Go 切片
- Go 請求處理頻率控制
- Go 時間
- Go 時間戳
- Go 時間格式化和解析
- Go 數字解析
- Go 隨機數
- Go 通道的同步功能
- Go 通道方向
- Go 通道緩沖
- Go 通道選擇Select
- Go 寫入文件
- Go 信號處理
- Go 原子計數器
- Go 正則表達式
- Go 指針