首页 > 后端开发 > Golang > 正文

如何在 Go 中分离子进程:为什么 os.SysProcAttr 是错误的工具?

Linda Hamilton
发布: 2024-11-03 12:54:02
原创
335 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板