diff --git a/app/models/solid_queue/record.rb b/app/models/solid_queue/record.rb
index d73e41b2..d88b833c 100644
--- a/app/models/solid_queue/record.rb
+++ b/app/models/solid_queue/record.rb
@@ -6,6 +6,11 @@ class Record < ActiveRecord::Base
 
     connects_to(**SolidQueue.connects_to) if SolidQueue.connects_to
 
+    def self.clear_all_connections!
+      self.connection_handler.clear_all_connections!(:writing)
+      self.connection_handler.clear_all_connections!(:reading)
+    end
+
     def self.non_blocking_lock
       if SolidQueue.use_skip_locked
         lock(Arel.sql("FOR UPDATE SKIP LOCKED"))
diff --git a/lib/solid_queue.rb b/lib/solid_queue.rb
index 02b88d05..fb90e946 100644
--- a/lib/solid_queue.rb
+++ b/lib/solid_queue.rb
@@ -20,6 +20,8 @@
 module SolidQueue
   extend self
 
+  ForkSafety # add fork safety hooks
+
   DEFAULT_LOGGER = ActiveSupport::Logger.new($stdout)
 
   mattr_accessor :logger, default: DEFAULT_LOGGER
diff --git a/lib/solid_queue/fork_safety.rb b/lib/solid_queue/fork_safety.rb
new file mode 100644
index 00000000..2c6abd53
--- /dev/null
+++ b/lib/solid_queue/fork_safety.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+module SolidQueue
+  module ForkSafety
+    def _fork
+      Record.clear_all_connections!
+
+      pid = super
+
+      pid
+    end
+  end
+end
+
+Process.singleton_class.prepend(SolidQueue::ForkSafety)
diff --git a/test/integration/processes_lifecycle_test.rb b/test/integration/processes_lifecycle_test.rb
index ebb1100c..69086761 100644
--- a/test/integration/processes_lifecycle_test.rb
+++ b/test/integration/processes_lifecycle_test.rb
@@ -127,7 +127,7 @@ class ProcessesLifecycleTest < ActiveSupport::TestCase
 
     signal_process(@pid, :TERM, wait: 0.5)
 
-    sleep(SolidQueue.shutdown_timeout + 0.5.second)
+    sleep(SolidQueue.shutdown_timeout + 0.1.second)
 
     assert_completed_job_results("no pause")
     assert_job_status(no_pause, :finished)