执行(Exec)外部程序

这是来自GoByExample的例子,代码在https://gobyexample.com/execing-processes

把新程序加载到自己的内存。

与Spawn不同,执行外部程序并不会返回到原进程中,也就是让外部程序完全取代本进程。

代码实现

  1. package main
  2. import "syscall"
  3. import "os"
  4. import "os/exec"
  5. func main() {
  6. binary, lookErr := exec.LookPath("ls")
  7. if lookErr != nil {
  8. panic(lookErr)
  9. }
  10. args := []string{"ls", "-a", "-l", "-h"}
  11. env := os.Environ()
  12. execErr := syscall.Exec(binary, args, env)
  13. if execErr != nil {
  14. panic(execErr)
  15. }
  16. }

运行结果

  1. $ go run execing-processes.go
  2. total 16
  3. drwxr-xr-x 4 mark 136B Oct 3 16:29 .
  4. drwxr-xr-x 91 mark 3.0K Oct 3 12:50 ..
  5. -rw-r--r-- 1 mark 1.3K Oct 3 16:28 execing-processes.go

归纳总结

如果你的程序就是用来执行外部程序的,例如后面提到的项目实例Run,那使用syscall.Exec执行外部程序就最合适了。注意调用该函数后,本进程后面的代码将不可能再执行了。