鍍金池/ 教程/ Linux/ 執(zhí)行(Exec)外部程序
信號(hào)
創(chuàng)建目錄權(quán)限
示例程序
進(jìn)程的定義
Hello World進(jìn)程
創(chuàng)建進(jìn)程
進(jìn)程鎖
第四章 項(xiàng)目實(shí)例Run
Nohup命令
PID
前言
系統(tǒng)調(diào)用sendfile
進(jìn)程參數(shù)
參考書(shū)籍
后記
進(jìn)程狀態(tài)
本書(shū)概述
寫(xiě)時(shí)復(fù)制(Copy On Write)
Docker簡(jiǎn)介
第五章 注意事項(xiàng)
實(shí)現(xiàn)Run
孤兒進(jìn)程概念
共享內(nèi)存
衍生(Spawn)新進(jìn)程
PPID
第三章 進(jìn)程進(jìn)階
退出碼
簡(jiǎn)介
進(jìn)程文件
Thanks for reading!
項(xiàng)目學(xué)習(xí)
第一章 進(jìn)程基礎(chǔ)
僵尸進(jìn)程
系統(tǒng)調(diào)用
POSIX簡(jiǎn)介
執(zhí)行(Exec)外部程序
文件描述符
進(jìn)程名字
進(jìn)程輸入與輸出
Cgroups
進(jìn)程間通信
查看PID
死鎖概念
進(jìn)程越多越好?
Run項(xiàng)目架構(gòu)
  • 1.
復(fù)制(Fork)進(jìn)程
第二章 Go編程實(shí)例
活鎖概念
守護(hù)(Daemon)進(jìn)程
并發(fā)與并行
捕獲SIGKILL
Namespaces簡(jiǎn)介

執(zhí)行(Exec)外部程序

執(zhí)行(Exec)外部程序

這是來(lái)自GoByExample的例子,代碼在https://gobyexample.com/execing-processes

把新程序加載到自己的內(nèi)存。

與Spawn不同,執(zhí)行外部程序并不會(huì)返回到原進(jìn)程中,也就是讓外部程序完全取代本進(jìn)程。

代碼實(shí)現(xiàn)

package main

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

func main() {
    binary, lookErr := exec.LookPath("ls")
    if lookErr != nil {
        panic(lookErr)
    }
    args := []string{"ls", "-a", "-l", "-h"}
    env := os.Environ()
    execErr := syscall.Exec(binary, args, env)
    if execErr != nil {
        panic(execErr)
    }
}

運(yùn)行結(jié)果

$ 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

歸納總結(jié)

如果你的程序就是用來(lái)執(zhí)行外部程序的,例如后面提到的項(xiàng)目實(shí)例Run,那使用syscall.Exec執(zhí)行外部程序就最合適了。注意調(diào)用該函數(shù)后,本進(jìn)程后面的代碼將不可能再執(zhí)行了。