I have been running a server with:
go run server.go &
When I am done with the process, this requires me to kill the process. The way I have been doing this is with kill PID
of the go run
process.
However, I've noticed my server appears connected still. Investigating further it seems that there are other processes go is starting which appear to "keep alive" my server:
$ps aux | grep go
username 70481 0.0 0.0 573416816 5228 ?? S 3:15PM 0:00.63 /var/folders/wf/89r2567s5hv48lj1g9l65mbw0000gp/T/go-build062422854/command-line-arguments/_obj/exe/server
username 70472 0.0 0.0 573407408 7720 ?? S 3:15PM 0:00.80 go run server.go
When I kill this associated process, too, I see that my connection is released as expected.
Is there a better way to "really" kill a golang process than kill PID
? Or is there a reason why there are these phantom processes?
I have resorted to killing both but this seems... strange.
$ go version
go version go1.5.4 darwin/amd64
The one you're calling the "phantom process" is your server, which is why killing it kills your server. The other is the "go run" utility itself, which is compiling your code and then running the resulting executable.