在Go 中執行指令並將其與進程分離
問題:
問題:進程的使用者受到控制。 進程當你的程式退出時不會死亡。
如果崩潰,進程不會變成殭屍。
你取得正在運行的進程的 PID。
嘗試的解決方案:
您嘗試使用cmd.Start() 和cmd.Process.Release(),但它們並不能阻止程式退出時進程變成殭屍行程。你也希望進程盡可能獨立,有自己的父PID、群組PID等<code class="go">package main import ( "context" "fmt" "os/exec" "github.com/hashicorp/go-reap" ) func main() { // Start a Reaper service to reap orphaned processes. doneCh := make(chan struct{}) ctx, cancel := context.WithCancel(context.Background()) reaper := reap.NewReaper(cancel) go reaper.Run(ctx) defer reaper.Stop() // Execute a command in a detached process. cmd := exec.Command("my-long-running-command", "args") pid, err := reaper.Reap(cmd) if err != nil { fmt.Printf("Error reaping process: %v\n", err) return } fmt.Printf("PID of detached process: %v\n", pid) // Wait for the detached process to complete. exitStatus, err := reaper.WaitPid(pid) if err != nil { fmt.Printf("Error waiting for process: %v\n", err) return } fmt.Printf("Detached process exited with status: %v\n", exitStatus) // Stop the Reaper service when done. close(doneCh) }</code>
以上是如何在 Go 中分離長時間運行的進程並避免殭屍?的詳細內容。更多資訊請關注PHP中文網其他相關文章!