分叉進程:處理分離和錯誤訊息
在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中文網其他相關文章!