分叉进程:处理分离和错误消息
在 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中文网其他相关文章!