[英]Main thread not running after goroutine calls exec?
我在Go https://gobyexample.com/execing-processes中阅读了有关exec的内容,并尝试使用goroutines做同样的事情。
在以下代码中,我试图使Go运行ls
,然后在主线程中打印成功消息。 但是,它仅显示ls,而不显示成功消息。
这是怎么回事?
谢谢。
package main
import "syscall"
import "os"
import "os/exec"
import "fmt"
func main() {
p := fmt.Println
done := make(chan bool)
binary, lookErr := exec.LookPath("ls")
if lookErr != nil {
panic(lookErr)
}
args := []string{"ls", "-a", "-l", "-h"}
env := os.Environ()
go func() {
execErr := syscall.Exec(binary, args, env)
if execErr != nil {
panic(execErr)
}
done <- true
}()
<-done
p("Done with exec")
}
这是输出:
Valeriys-MacBook-Pro:test valeriy$ go run test.go
total 8
drwxr-xr-x 3 valeriy staff 96B Dec 17 15:46 .
drwxr-xr-x 8 valeriy staff 256B Dec 17 00:06 ..
-rw-r--r-- 1 valeriy staff 433B Dec 17 15:38 test.go
syscall.Exec
将当前进程替换为被调用的进程。
如果要在保持原始程序运行的同时运行外部命令,则需要使用exec.Command
顺便说一句,您包含的链接确实显示:
有时,我们只想用另一个(也许是非Go)进程完全替换当前的Go进程。
如果您确实要使用syscall
程序包,则可以使用syscall.StartProcess
来执行fork / exec而不是普通exec。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.