After terminating the full node (ctrl+c) I found that in some cases one or several python processes still run. After investigating I found the the _kill_servers() method is actually not killing the processes as it didn't specify SIGKILL. By default kill will send SIGTERM which _term() was already doing.
* New database table to store headers
* Loading blockchain only loads headers into memory instead of header blocks (header + proofs), speeds up the startup, and reduces normal operation memory usage by 80%
* Fix deadlock issues with store class
* Make memory store access synchronous, to reduce use of locks, this improves performance of block and unfinished block processing
* Remove locks from reads of DB, only lock for writes
* Cleaner configuration system with argparse
* Log to file by default, configurable to stdout
* Proof of space binary and create_plots scripts allow passing in temp and final directories
* Switches to sqlite and remove all mongo stuff
* Starts RPC server on port 8555
* UI is in new process, communicates to node through rpc
* JSON serialization for streamables
* Harvester periodically prints its plot names and sizes
* Process names are set to chia_full node, chia_harvester, etc
* CONTRIBUTING.md, and remove docs from git (put in wiki)
* Adds the SmallHeaderBlock type, it's header block without the PoT and PoSpace
* Fix harvester bug (allows two harvesters in the same machine)
* Sync changes
* Add recent peer threshold to full node
* Change farmer to weight instead of height
* Remove asyncio cancel, and add visibility of farming rewards
* Added a new API call GetAllHeaderHashes which returns just the header hashes. This is used for finding fork point.
* Only downloads headers and blocks from fork point
* Remove CancelledError logging
* Short sync should now work properly, it will always ask for previous block. There might be some repeated requests.
* Introducer now only returns peers which it has seen recently, and full node only connects to peers which it has heard from recently.