簡體   English   中英

goroutine調用exec后主線程未運行?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM