golang如何設(shè)置子進(jìn)程的環(huán)境變量
在C/C++里面我們可以使用fork()系統(tǒng)調(diào)用,然后在fork出來的子進(jìn)程里面重新設(shè)置環(huán)境變量,最后在運行execl()系列命令加載子程序。
但是在golang里面并沒有提供類似的fork()系統(tǒng)函數(shù),如何調(diào)整子進(jìn)程的環(huán)境變量呢。
exec.Command調(diào)用子進(jìn)程的代碼例子:
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設(shè)置環(huán)境變量:
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
...
就是一個環(huán)境變量數(shù)組,我們自然可以增加,刪除,修改這個數(shù)組的內(nèi)容,然后重新賦值給Cmd對象。