On Friday, August 9, 2002, at 09:14 , Ahmed Moustafa wrote:
> If a Perl program generates ZOMBIE/defunct processes, how does that > affect the system? [..] theoretically each process takes up an index in the process table, and hence one can reach the moment where the kernel can not fork another process - at which point various things will start to get weird - depending upon how the kernel is built. So the real problem here is working in an OS where processes can be harvested by 'init' - hence your worst case is that you will need to kill off the child of init who is spawning zombie processes, so that: a) it stops doing that b) init inherits all of the 'children' and lets them exit the trick of course is to maintain enough control of the system so that you can do this. It was a lot harder in the old days when kernels were smaller, and some of the algorithm for queuing processes were less smart, so one actually slowed down the system as the length of PIDS increased and had to be traversed badly.... so your real answer for how to simply avoid this problem lies in perldoc -q zombie which of course references you to perldoc perlipc perldoc perlfunc so the principle trick is to know when, where and how you are 'forking children' and to do so responsibly. [..] given that your code example use POSIX ":sys_wait_h"; #... do { $kid = waitpid(-1,&WNOHANG); } until $kid == -1; comes from perldoc -f waitpid and your system has implemented the waitpid(2) or wait4(2) calls - then you should feel save that it will work as advertised. you could of course adopt the strategy as noted in perldoc -f fork of simply going with $SIG{CHLD} = "IGNORE"; so that YOU abandon all hope for your children... But my preferred strategy is to not fork stuff willy nilly to begin with and avoid the problem with simply sound and solid design followed by correct implementation.... ciao drieux --- -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]