Detach bisect subprocesses to avoid making zombie processes
Created by: benoittgt
If we do not waitpid
or detach
the bisect process become a zombie process.
As mentioned in waitpid doc:
As long as a zombie is not removed from the system via a wait, it will consume a slot in the kernel process table, and if this table fills, it will not be possible to create further processes.
detach
is a good idea. Thanks @pirj. From the Ruby doc:
Some operating systems retain the status of terminated child processes until the parent collects that status (normally using some variant of wait()). If the parent never collects this status, the child stays around as a zombie process. Process::detach prevents this by setting up a separate Ruby thread whose sole job is to reap the status of the process pid when it terminates. Use detach only when you do not intend to explicitly wait for the child to terminate.
Related:
- https://github.com/rspec/rspec-core/pull/2669
- https://andrykonchin.github.io/rails/2019/12/25/deadlock-in-rspec.html
Thanks @pirj and @andrykonchin