golang如何设置子进程的环境变量
在C/C++里面我们可以使用fork()系统调用,然后在fork出来的子进程里面重新设置环境变量,最后在运行execl()系列命令加载子程序。
但是在golang里面并没有提供类似的fork()系统函数,如何调整子进程的环境变量呢。
exec.Command调用子进程的代码例子:
cmd := exec.Command(cccmd, ccparam)
cmd.Stdout = fifo
cmd.Stderr = fifo
ChangeYourCmdEnvironment(cmd)
err = cmd.Run()
if err != nil {
Error("chaincode execution quit, error=[%v]", err)
}
我们看ChangeYourCmdEnvironment,如何为Cmd设置环境变量:
func ChangeYourCmdEnvironment(cmd * exec.Cmd) error {
env := os.Environ()
cmdEnv := []string{}
for _, e := range env {
i := strings.Index(e, "=")
if i > 0 && (e[:i] == "ENV_NAME") {
// do yourself
} else {
cmdEnv = append(cmdEnv, e)
}
}
cmd.Env = cmdEnv
return nil
}
我们看到Cmd对象里面对Env的解释
type Cmd struct {
...
// Env specifies the environment of the process.
// If Env is nil, Run uses the current process's environment.
Env []string
...
就是一个环境变量数组,我们自然可以增加,删除,修改这个数组的内容,然后重新赋值给Cmd对象。
网友评论