[英]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.