Project

General

Profile

ActionsLike0

Bug #18911

closed

Process._fork hook point is not called when Process.daemon is used

Added by ivoanjo (Ivo Anjo) over 2 years ago. Updated over 1 year ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin20]
[ruby-core:109196]

Description

Hello there! I'm working at Datadog on the ddtrace gem, and we need to hook into fork operations to make sure that our products work correctly/automatically even in environments that fork.

As part as #17795 a new Process._fork method was added to allow libraries and frameworks to easily hook into fork operations. I was investigating its use in ddtrace and noticed the following gap: the Process.daemon API internally makes use of fork, but the new hook point is not called for that API.

Testcase:

puts RUBY_DESCRIPTION

module ForkHook
  def _fork(*args)
    puts "  #{Process.pid} Before fork!"
    res = super
    puts "  #{Process.pid} After fork!"
    res
  end
end

Process.singleton_class.prepend(ForkHook)

puts "#{Process.pid} Regular fork:"

fork { exit }
Process.wait

puts "#{Process.pid} Process.daemon:"

Process.daemon(nil, true)

puts "#{Process.pid} Finishing!"

Testcase output:

ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin20]
48136 Regular fork: # <-- original process
  48136 Before fork!
  48136 After fork! # <-- original process
  48137 After fork! # <-- child process
48136 Process.daemon: # <-- original process
48139 Finishing! # <-- forks and pid changes, but the hook isn't called

This was surprising to me since the advantage of this hook point would not not needing to hook into the many other places where fork can get called from.

Thanks a lot :)

Added by ivoanjo (Ivo Anjo) over 2 years ago

Revision 74817f3d

[DOC] Process._fork does not get called by Process.daemon

As discussed in Bug #18911, I'm adding some documentation to
Process._fork to clarify that it is not expected to cover
calls to Process.daemon.

Co-authored-by: Yusuke Endoh

ActionsLike0

Also available in: Atom PDF