Как развить процесс

Мне нужна помощь, чтобы понять, как демонизировать процесс в 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

Результаты этой ошибки: "паника" на неправильный указатель памяти

Ответы

Ответ 1

Я спросил в "golang-nut" и выяснил, что у golang есть ссылка:

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

Ответ 2

AFAIK Go еще не полностью поддерживает запись истинных демонов в Go. Некоторые из предыдущих обсуждений по этой теме:

https://groups.google.com/d/topic/golang-nuts/KynZO5BQGks/discussion

https://groups.google.com/d/topic/golang-nuts/1bF39FuX-48/discussion

https://groups.google.com/d/topic/golang-nuts/0P_kErKUCEU/discussion

https://groups.google.com/d/topic/golang-nuts/BSvqvyOqX-I/discussion

https://groups.google.com/d/topic/golang-nuts/H6d-3UfAa1A/discussion

Ответ 3

Вот поддельный демон в go; он прост в использовании: 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))
}