首頁  >  文章  >  後端開發  >  如何在 Go 中分離子程序:為什麼 os.SysProcAttr 是錯誤的工具?

如何在 Go 中分離子程序:為什麼 os.SysProcAttr 是錯誤的工具?

Linda Hamilton
Linda Hamilton原創
2024-11-03 12:54:02361瀏覽

How to Detach a Child Process in Go: Why os.SysProcAttr is the Wrong Tool for the Job?

分叉進程:處理分離和錯誤訊息

在Go 中,進程分叉允許您創建一個獨立於其運行的子進程父母。這對於多種原因可能很有用,例如後台處理或服務建立。

您提供的程式碼使用 os.StartProcess 建立一個子進程,但很難將子進程從命令列分離,並保持它們連接。為了解決這個問題,您嘗試使用 procAttr.Sys.HideWindow 隱藏子窗口,但遇到與記憶體指標相關的錯誤。

您遇到的錯誤是由於設定 ProcAttr 結構體的 Sys 欄位所致錯誤地。在 Go 中,os.StartProcess 期望 Sys 欄位的類型與底層作業系統相對應。對於 Windows,正確的類型是 syscall.SysProcAttr。

要解決該錯誤,請修改程式碼以使用syscall.SysProcAttr 而不是os.SysProcAttr:

package main

import (
    "fmt"
    "os"
    "os/exec"
    "syscall"
)

func start() {
    var procAttr syscall.SysProcAttr
    procAttr.Files = []*os.File{nil, nil, nil}
    cmd := exec.Command("c:\Path\to\program.exe")
    cmd.SysProcAttr = &procAttr
    if err := cmd.Start(); err != nil {
        fmt.Printf("%v", err)
    }
}

func main() {
    start()
}

透過使用專用系統呼叫輸入作業系統特定的設置,您可以避免錯誤並成功從命令列分離子進程。

以上是如何在 Go 中分離子程序:為什麼 os.SysProcAttr 是錯誤的工具?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn