libstd/sys/unix/process.rs: reap a zombie who didn't get through to exec(2) #19454
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.
After the library successfully called
fork(2), the child does severalsetup works such as setting UID, GID and current directory before it
calls
exec(2). When those setup works failed, the child exits but theparent didn't call
waitpid(2)and left it as a zombie.This patch also add several sanity checks. They shouldn't make any
noticeable impact to runtime performance.
The new test case in
libstd/io/process.rscalls the ps command to checkif the new code can really reap a zombie.
The output of
ps -A -o pid,sid,commandshould look like this:where
./spawn-failureis my test program which intentionally leaves manyzombies. Filtering the output with the "SID" (session ID) column is
a quick way to tell if a process (zombie) was spawned by my own test
program. Then the number of "defunct" lines is the number of zombie
children.