У меня есть простой веб-сервер Go:
package main
import (
"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)
}
}
И Makefile, который запускает его и кэширует PID в файл PID:
GOSRC=$(wildcard *.go)
.PHONY: kill
kill:
echo ""
.PHONY: neaten
neaten:
go clean
go mod tidy
go mod download
goimports -w $(GOSRC)
go vet $(GOSRC)
go test -cover $(GOSRC)
.PHONY: build
build: neaten
go build -o server $(GOSRC)
.PHONY: run
run: kill build
nohup ./server &
echo $! > server.pid
Однако, echo $!
делаетпо какой-то причине не работает, я получаю пустой файл server.pid. Процесс определенно запущен, так как я могу получить доступ к веб-серверу. Но echo $!
ничего не делает.
Я также пробовал echo $$
, но это тоже мало что делает.
Я также запускаю Makefile из рыбного терминала.