pkill的用法:http://man.linuxde.net/pkill
根據進程命令行,殺死進程
如下intellij.go代碼為一個代理服務器,把本地請求轉向一個代理

package main import ( "flag" "log" "net/http" "net/http/httputil" "net/url" ) type handle struct { reverseProxy string } func (this *handle) ServeHTTP(w http.ResponseWriter, r *http.Request) { remote, err := url.Parse(this.reverseProxy) if err != nil { log.Fatalln(err) } proxy := httputil.NewSingleHostReverseProxy(remote) r.Host = remote.Host proxy.ServeHTTP(w, r) log.Println(r.RemoteAddr + " " + r.Method + " " + r.URL.String() + " " + r.Proto + " " + r.UserAgent()) } func main() { bind := flag.String("l", "0.0.0.0:8888", "listen on ip:port") remote := flag.String("r", "http://idea.imsxm.com:80", "reverse proxy addr") flag.Parse() log.Printf("Listening on %s, forwarding to %s", *bind, *remote) h := &handle{reverseProxy: *remote} err := http.ListenAndServe(*bind, h) if err != nil { log.Fatalln("ListenAndServe: ", err) } }
在mac下啟動:go run intellij.go
查看進程:有兩個進程96473、96466
開啟進程后的情況:
因此這個代理服務器的真正進程ID是96473,進程名字是/var/folders/....../intellij
如果使用pkill go只能殺死進程ID 96466,並不能終止代理服務。但是有意思的時,殺死進程ID 96466並不影響代理服務器的工作
真正能讓代理服務器停止工作的命令是:pkill intellij
猜想:96466是daemon,96473是主進程,殺死守護進程96466並不影響主進程96473的運行,反之,殺死主進程96473,守護進程就沒有存在的意義,一同死掉
強制殺死進程用signal 9: pkill -9 96473