diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index c40bc1a4c2fa5358d3db9540bedea660d333b63b..3b85363fe2ac2f09e78cb346b55a8deea6e15b18 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -578,7 +578,12 @@ (define (wait-for-udevd)
                              (system* (string-append #$udev "/bin/udevadm")
                                       "settle")
                              pid)))))
-             (stop #~(make-kill-destructor))))))
+             (stop #~(make-kill-destructor))
+
+             ;; When halting the system, 'udev' is actually killed by
+             ;; 'user-processes', i.e., before its own 'stop' method was
+             ;; called.  Thus, make sure it is not respawned.
+             (respawn? #f)))))
 
 (define (device-mapping-service target command)
   "Return a service that maps device @var{target}, a string such as