慕雪6442864
一种解决方案是exec.Command在其 goroutine 中使用执行。这就是这个小项目akshaydeo/go_process所做的:// Method to fork a process for given command// and return ProcessMonitorfunc Fork(processStateListener ProcessStateListener, cmdName string, cmdArgs ...string) { go func() { processMonitor := &ProcessMonitor{} args := strings.Join(cmdArgs, ",") command := exec.Command(cmdName, args) output, err := command.Output() if err != nil { processMonitor.Err = err processStateListener.OnError(processMonitor, err) } processMonitor.Output = &output processStateListener.OnComplete(processMonitor) }()}该测试process_test.go显示了一些示例:// Test case for forkfunc TestFork(t *testing.T) { processStateListenerImpl := &ProcessStateListenerImpl{make(chan bool)} Fork(processStateListenerImpl,"ls", "-a") //("ping","192.168.3.141","-c","3") // waiting onto monitor <-processStateListenerImpl.monitor}