diff --git a/NEWS b/NEWS
index 015cffde2..18ac57f8f 100644
--- a/NEWS
+++ b/NEWS
@@ -29,6 +29,8 @@ ver 0.24 (not yet released)
 * switch to C++20
   - GCC 10 or clang 11 (or newer) recommended
 * static partition configuration
+* Linux
+  - shut down if parent process dies in --no-daemon mode
 * Windows
   - build with libsamplerate
   - remove JACK DLL support
diff --git a/src/Main.cxx b/src/Main.cxx
index 278772ec4..0a2811d1c 100644
--- a/src/Main.cxx
+++ b/src/Main.cxx
@@ -431,7 +431,10 @@ MainConfigured(const CommandLineOptions &options,
 #ifndef ANDROID
 	setup_log_output();
 
-	const ScopeSignalHandlersInit signal_handlers_init(instance);
+	const ScopeSignalHandlersInit signal_handlers_init{
+		instance,
+		options.daemon,
+	};
 #endif
 
 	instance.io_thread.Start();
diff --git a/src/unix/SignalHandlers.cxx b/src/unix/SignalHandlers.cxx
index c423ebac6..cbdfd1940 100644
--- a/src/unix/SignalHandlers.cxx
+++ b/src/unix/SignalHandlers.cxx
@@ -30,6 +30,10 @@
 
 #include <csignal>
 
+#ifdef __linux__
+#include <sys/prctl.h>
+#endif
+
 static constexpr Domain signal_handlers_domain("signal_handlers");
 
 static void
@@ -60,7 +64,7 @@ handle_reload_event(void *ctx) noexcept
 #endif
 
 void
-SignalHandlersInit(Instance &instance)
+SignalHandlersInit(Instance &instance, bool daemon)
 {
 	auto &loop = instance.event_loop;
 
@@ -79,6 +83,14 @@ SignalHandlersInit(Instance &instance)
 
 	SignalMonitorRegister(SIGHUP, {&instance, handle_reload_event});
 #endif
+
+	if (!daemon) {
+#ifdef __linux__
+		/* if MPD was not daemonized, shut it down when the
+		   parent process dies */
+		prctl(PR_SET_PDEATHSIG, SIGTERM);
+#endif
+	}
 }
 
 void
diff --git a/src/unix/SignalHandlers.hxx b/src/unix/SignalHandlers.hxx
index 2d8da72da..836bbc927 100644
--- a/src/unix/SignalHandlers.hxx
+++ b/src/unix/SignalHandlers.hxx
@@ -23,15 +23,15 @@
 struct Instance;
 
 void
-SignalHandlersInit(Instance &instance);
+SignalHandlersInit(Instance &instance, bool daemon);
 
 void
 SignalHandlersFinish() noexcept;
 
 class ScopeSignalHandlersInit {
 public:
-	ScopeSignalHandlersInit(Instance &instance) {
-		SignalHandlersInit(instance);
+	ScopeSignalHandlersInit(Instance &instance, bool daemon) {
+		SignalHandlersInit(instance, daemon);
 	}
 
 	~ScopeSignalHandlersInit() noexcept {