If the frontend crashes for whatever reason, the backend process gets left behind, leading to errors when running the frontend again.
We can implement a keepalive ping between the frontend and the backend - the frontend can continually ping the backend every 20 seconds, say, and if the backend doesn't hear from the frontend within 30 seconds it can gracefully shut itself down.
Related to #238.
If the frontend crashes for whatever reason, the backend process gets left behind, leading to errors when running the frontend again.
We can implement a keepalive ping between the frontend and the backend - the frontend can continually ping the backend every 20 seconds, say, and if the backend doesn't hear from the frontend within 30 seconds it can gracefully shut itself down.
Related to #238.