Emacs cannot guarantee that a subprocess gets killed on Windows 95 and its descendants, and it is a difficult limitation to work around. To avoid problems on these systems, you should let subprocesses run to completion including explicitly exiting shells before killing the associated buffer.
If you find that while shutting down, Windows complains that there is
cmdproxy.exe even though you carefully exited all
shells and none were showing in Task Manager before the shutdown, this
could be due to buggy interaction with your virus scanner.