Run processes in new process groups, kill process group instead of process
This is https://github.com/ddollar/foreman/pull/723 but rebased against master today. Credit to @davishmcclurg for suggesting those changes in the first place.
Some processes are getting orphaned when running Foreman with JRuby. Creating a new pgroup allows them all to be killed together.
I believe the issue is related to how JRuby handles
Dir.chdirby creating a shell process:sh -c 'cd /chdir/target; ${command}'. That causes a second process to be created that won't get cleaned up by killing the parent.
I think this change also addresses #779. It makes Foreman match what Honcho does, and Honcho does not exhibit the problem shown in #779.
Close #779
(Some additional background: There was an earlier PR #528 that did half of what this PR does, https://github.com/ddollar/foreman/issues/525 was closed after that was merged, but then the PR was reverted after a few days, could not find the reason for that).
cc @ddollar this is my only day to day pain with foreman.
Would love getting this get merged.
@domenkozar I think it's time to fork and release a new gem. The issue this PR addresses drives me nuts as well and it's getting close to a year for a branch with no conflicts.
I maintain way too many OSS projects, but if you decide to go for it, I'm happy to test.
Ping @ddollar
foreman forked: https://github.com/spinels/overman, https://rubygems.org/gems/overman
The published version is current master (a5f9b78) + this PR. The executable is called overman so you can have both gems installed at the same time. You can also uninstall foreman and make foreman an alias to overman.
Please try it!
This PR makes it better, but it's not enough, see https://github.com/spinels/overman/issues/2.
For what it's worth, I was running into orphaned children in some situations after a Ctrl+C on foreman, and switching to overman resolved that.
Scratch that: it resolved the issue on my system, but some colleagues ran into weird behavior with some spawned processes (specifically the Vite dev server).