Ответ 1
Я спросил в "golang-nut" и выяснил, что у golang есть ссылка:
go tool 8l -o output.exe -Hwindowsgui input.8
Мне нужна помощь, чтобы понять, как демонизировать процесс в 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
Результаты этой ошибки: "паника" на неправильный указатель памяти
Я спросил в "golang-nut" и выяснил, что у golang есть ссылка:
go tool 8l -o output.exe -Hwindowsgui input.8
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
Вот поддельный демон в 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))
}