2012-04-05 5 views
14

이동 프로세스를 악의적으로 만드는 방법을 이해하는 데 도움이 필요합니다.골뱅 포크 프로세스

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 

결과이 오류에 "패닉"잘못된 메모리 포인터에

답변

10

내가 'golang 너트'에서 질문하고, 발견 :이 주제에 대한 이전 논의의 일부 golang에는 링크 옵션이 있습니다.

go tool 8l -o output.exe -Hwindowsgui input.8 
3
+2

예, 그리고 토론의 일부는 개방 문제, http://code.google.com/p/go/issues/detail을 언급 인용을 그것은 사용하기 간단? id = 227 – Sonia

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)) 
}