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