`$!` stores the PID of the last process sent to the background. It's unlikely that any machine will have multiple gzservers running unless someone is running a heavily modified version of gazebo, but `kill $!` ensures we are killing the exact process we started. I believe it is the standard way of killing a background process when you only have one.

I am not exactly sure of there is any shell where `killall` will work and `kill $!` won't. I'll change the line to `kill -s SIGINT $!`