Before daemonization, just probe the data directory lock and print an
early error message if possible.
After daemonization get the data directory lock again and hold on to it until exit
This creates a slight window for a race condition to happen, however this condition is harmless: it
will at most make us exit without printing a message to console.
$ src/bitcoind -testnet -daemon
Bitcoin server starting
$ src/bitcoind -testnet -daemon
Error: Cannot obtain a lock on data directory /home/orion/.bitcoin/testnet3. Bitcoin Core is probably already running.
returnInitError(strprintf(_("Cannot obtain a lock on data directory %s. %s is probably already running.")+" %s.",strDataDir,_(PACKAGE_NAME),e.what()));
returnInitError(strprintf(_("Cannot obtain a lock on data directory %s. %s is probably already running.")+" %s.",strDataDir,_(PACKAGE_NAME),e.what()));