When you run bin/solr -f, bash invokes java as a sub-process.
If you kill -TERM the script, java gets terminated uncleanly.
The script should invoke java using exec: then, when you send a TERM, it stops ServerConnector and shuts down the core. And you save yourself a process in the process.
See this patch https://gist.github.com/makuk66/5ba75e8d592bf5428611