/*
    go进程执行 去触发执行一个外部进程
    go进程里面可以访问外部进程的信息
    执行一个外部进程来代替当前的go进程
    go 提供一个exec函数
 */
package main
import (
     "os"
     "os/exec"
     "syscall"
 )
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)
     }
 }
  
