如何分叉一个过程

时间:2012-04-05 11:11:08

标签: fork go

我需要帮助了解如何在Go中妖魔化一个过程。

package main

import (
   "fmt"
   "os"
)

func start() {
   var procAttr os.ProcAttr 
   procAttr.Files = []*os.File{nil, nil, nil}
   _, err := os.StartProcess("/Path/prog", nil, &procAttr)
   if err != nil {
       fmt.Printf("%v", err)
   }
}


func main () {
   start()
} 

如果在命令行上启动此代码,程序将返回控制权,但仍与cmd连接。关闭cmd会关闭程序。

如何将其与cmd分离?添加:

procAttr.Sys.HideWindow = true

导致此错误:“恐慌”错误的内存指针

3 个答案:

答案 0 :(得分:10)

我问'golang-nuts',发现golang有一个链接选项:

go tool 8l -o output.exe -Hwindowsgui input.8

答案 1 :(得分:3)

答案 2 :(得分:2)

这是一个假的守护进程;使用简单:https://github.com/icattlecoder/godaemon

一个例子:

package main

import (
    _ "github.com/icattlecoder/godaemon"
    "log"
    "net/http"
)

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/index", func(rw http.ResponseWriter, req *http.Request) {
        rw.Write([]byte("hello, golang!\n"))
    })
    log.Fatalln(http.ListenAndServe(":7070", mux))
}