這是來自GoByExample的例子,代碼在https://gobyexample.com/execing-processes。
把新程序加載到自己的內(nèi)存。
與Spawn不同,執(zhí)行外部程序并不會返回到原進程中,也就是讓外部程序完全取代本進程。
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)
}
}
$ 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
如果你的程序就是用來執(zhí)行外部程序的,例如后面提到的項目實例Run,那使用syscall.Exec執(zhí)行外部程序就最合適了。注意調(diào)用該函數(shù)后,本進程后面的代碼將不可能再執(zhí)行了。