亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法獲取 Web 服務器的 PID

無法獲取 Web 服務器的 PID

Go
搖曳的薔薇 2023-07-31 16:00:38
我有一個簡單的 Go Web 服務器:package mainimport (    "net/http"    "strings")func sayHello(w http.ResponseWriter, r *http.Request) {    message := r.URL.Path    message = strings.TrimPrefix(message, "/")    message = "Hello " + message    w.Write([]byte(message))}func main() {    http.HandleFunc("/", sayHello)    if err := http.ListenAndServe(":8080", nil); err != nil {        panic(err)    }}以及一個運行它并將 PID 緩存到 PID 文件的 Makefile:GOSRC=$(wildcard *.go).PHONY: killkill:    echo "".PHONY: neatenneaten:    go clean    go mod tidy    go mod download    goimports -w $(GOSRC)    go vet $(GOSRC)    go test -cover $(GOSRC).PHONY: buildbuild: neaten    go build -o server $(GOSRC).PHONY: runrun: kill build    nohup ./server &    echo $! > server.pid但是,echo $!由于某種原因不起作用,我得到的是一個空的 server.pid 文件。該進程肯定正在運行,因為我可以訪問網絡服務器。但echo $!什么也不做。我也嘗試過echo $$,但這也沒有多大作用。我還從 Fish 終端運行 Makefile。
查看完整描述

1 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

當您從 運行命令時make,每個命令都在單獨的 shell 中執行:


run: kill build

    nohup ./server &

    echo $! > server.pid

“nohup”將在一個 shell 中執行,并且echo將在不同的 shell 中執行。因此,后臺進程 ($!) 的 PID 在第一行中可用,但在第二行中不可用。


簡單的解決方案是將兩個命令放在同一行。


run: kill build

    nohup ./server &  echo $! > server.pid


查看完整回答
反對 回復 2023-07-31
  • 1 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號