Go https://gobyexample.com/execing-processes에서 exec에 관해 읽었으며 goroutines를 사용하여 동일한 작업을 시도했습니다.goroutine이 exec를 호출 한 후 주 스레드가 실행되지 않습니까?
다음 코드에서는 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