How do you handle while(1) fork(); ?

Chad Price price at chakra.unl.edu
Tue Jul 17 08:03:40 AEST 1990


In <671 at mtune.ATT.COM> jrw at mtune.ATT.COM (Jim Webb) writes:

>In article <841 at massey.ac.nz>, ARaman at massey.ac.nz (A.V. Raman) writes:
>> Is there any way to kill all instances of a process that has the
>> following piece of code in it without having to bring the system down?
>> 
>>    while (1)
>>       fork();

>Under System V, running "kill -9 -1" will send the kill to all processes
>belonging to the invoking user.  So, to stop the above, you could do that
>as the user (if s/he has any processes left) or by becoming root and then
>entering:

>		su pest -c "kill -9 -1"

>if no process slots are available to the user.  Obviously, this kills
>everything that user is running, not just the above wonderfulness.

>Have fun.

>-- 
>Jim Webb                "Out of Phase -- Get Help"               att!mtune!jrw
>                  "I'm bored with this....Let's Dance!"

I think that will not work (personal experience). Any process that is
doing a while(1)fork(); will drag the system down too far for this to
help. What you need to do is renice the processes down and then kill them
all. THe solution is courtesy of Rory Cejka (now at Utah) who did this
for me when I made the above mistake.  This works on Ultrix.

Use the following 2 shell-scripts (as root):


#! /bin/sh
# @(#)Renices all processes with lines from a "ps aug" that match
# @(#)the pattern given in the second argument to the priority given
# @(#)in the first argument.
#
z=`ps -aug | grep $2 | grep -v grep | grep -v csh | grep -v kill | awk '{ print $2 }'`
renice $1 $z



#! /bin/sh
# @(#)Kills all processes with lines from a "ps aug" that match
# @(#)the pattern given in the first argument.
#
z=`ps -aug | grep $1 | grep -v grep | grep -v csh | grep -v kill | awk '{ print $2 }'`
kill -9 $z


Chad Price
price at fergvax.unl.edu



More information about the Comp.unix.questions mailing list