我要開始一個新的進程中去下列要求:在去啓動一個進程和分離從它
- 起動過程應該運行轉到過程結束後也
- 我需要能夠設置的運行它的Unix用戶/組
- 我需要能夠設置環境變量繼承
- 我需要在輸入/輸出控制性病/犯錯
下面是一個嘗試:
var attr = os.ProcAttr {
Dir: "/bin",
Env: os.Environ(),
Files: []*os.File{
os.Stdin,
"stdout.log",
"stderr.log",
},
}
process, err := os.StartProcess("sleep", []string{"1"}, &attr)
這工作得很好,但有從需求存在以下缺點:
- 沒有辦法設置Unix用戶/組
- 的啓動過程結束時轉到進程(父)停止
只有在簡化事情的情況下,才需要在Linux上運行。
它看起來像你想要做的是分叉過程。 Go計劃中有這樣的警告請參閱此問題:https://code.google.com/p/go/issues/detail?id=227 – fabrizioM
您無法在Go中使用fork()方法,特別是一旦運行時啓動並運行。子進程應該是負責從父進程中分離出來的進程,或者使用像「start-stop-daemon」這樣的包裝器。 – JimB