Bug #2349
fork() after signal(SIGCHLD, SIG_IGN) produces zombies
| Status: | Closed | Start date: | 04/17/2012 | |
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assignee: | - | % Done: | 100% |
|
| Category: | - | |||
| Target version: | - |
Description
The code in the attached zombifier.c makes every exiting child into a zombie on master[1]. This doesn't happen on any non-DragonFly system I could test it on, and from what I gather from this discussion[2] and what Wikipedia says about SUSv3/POSIX-1.2001 the correct behaviour is not to keep them around if the SIGCHLD handler is explicitly set to SIG_IGN.
This has realworldly bitten me because the FCGI-to-CGI-wrapper I use[4] relies on this behaviour and I couldn't SSH into my server as a non-root user due to PID exhaustion.
[1] DragonFly zz.2pktfkt.net 3.1-DEVELOPMENT DragonFly v3.1.0.545.g4c42b-DEVELOPMENT #6: Tue Apr 17 21:24:31 CEST 2012 matthias@zz.2pktfkt.net:/usr/obj/usr/src/sys/X86_64_GENERIC x86_64
[2] http://markmail.org/message/3s4jj7dpgw34yvmh
[3] http://en.wikipedia.org/wiki/Zombie_process
[4] http://pkgsrc.se/wip/fcgiwrap
Related todos
Related issues
History
Updated by herrgard about 1 year ago
On Tue, Apr 17, 2012 at 01:11:09PM -0700, Matthias Rampke via Redmine wrote:
> The code in the attached zombifier.c makes every exiting child into a zombie on master[1]. This doesn't happen on any non-DragonFly system I could test it on, and from what I gather from this discussion[2] and what Wikipedia says about SUSv3/POSIX-1.2001 the correct behaviour is not to keep them around if the SIGCHLD handler is explicitly set to SIG_IGN.
>
> This has realworldly bitten me because the FCGI-to-CGI-wrapper I use[4] relies on this behaviour and I couldn't SSH into my server as a non-root user due to PID exhaustion.
Hm, maybe this could be the same reason why I keep getting zombies with firefox, thunderbird and xpdf all the time.
Max
Updated by matthiasr about 1 year ago
- File dragonfly-SIGCHLD.patch added
- % Done changed from 0 to 50
Here's a patch against master I cargoculted from FreeBSD-current, taking the patches in that old thread as pointers. The kernel boots and works for me and the test case no longer generates zombie processes.
Updated by ftigeot about 1 year ago
- Status changed from New to Resolved
- % Done changed from 50 to 100
Patch committed, thanks!