Ignore SIGCHLD to prevent creating zombies #279
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
As #200 (comment) pointed out, calling
waitpid
once on SIGCHLD is not enough. Multiple children may died during the delivery of the signal. I also hit this in production with earlyoom 1.7.This PR uses
signal(SIGCHLD, SIG_IGN);
to prevents creations of zombies.In manual sigaction(2),
I think relying on POSIX 2001 should be enough for us. But note that ignoring SIGCHLD seems also prevent any usage of
wait*
functions. Currently we doesn't do it. Alternatively, we could run a loop in the signal handler to achieve the same goal.Here is the test which proves a single
waitpid
is not enough,