CUESTIÓN

¿Qué hago cuando mi programa se desboca para no perjudicar el funcionamiento de la máquina?


SOLUCIÓN

Mejor que nada ver un ejemplo. Lanzamos una aplicación que se desborda por el número de hijos que crea:
<ENCINA>/home/gyermo/PRIVADO/FORKBOMB$ forkbomb &
[1]     1139
<ENCINA>/home/gyermo/PRIVADO/FORKBOMB$
Si la aplicación está bien hecha, tendrá en cuenta el valor devuelto por fork y, en el caso de que no funcione, nos dará un error por la pantalla proveniente del correspondiente perror. Pero si no es así, podemos inspeccionar los procesos que estamos ejecutando con:
<ENCINA>/home/gyermo/PRIVADO/FORKBOMB$ ps -l
ksh: cannot fork: too many processes
<ENCINA>/home/gyermo/PRIVADO/FORKBOMB$
¡Vaya! Pues sí que iba mal la aplicación, ha gastado los cien hijos que tengo de cupo y ahora no puedo ni ejecutar un mísero ps. ¡Claro! para ejecutarlo necesito un proceso más que ya no tengo. Podemos probar a mandar la señal SIGTERM(15) a todos mis procesos(-1):
/home/gyermo/PRIVADO/FORKBOMB$ kill -15 -1
<ENCINA>/home/gyermo/PRIVADO/FORKBOMB$ kill -15 -1
<ENCINA>/home/gyermo/PRIVADO/FORKBOMB$ ps -l
 F S   UID   PID  PPID  C PRI NI     ADDR     SZ   WCHAN  TTY      TIME CMD
 8 R   108  1536  1532  0  51 20        ?    233          pts/1    0:00 ksh
[1] + Terminated               forkbomb &
<ENCINA>/home/gyermo/PRIVADO/FORKBOMB$
Parece que funcionó. Ya me voy a la cama tranquilo.
[[ Depués de dos horas de plácido sueño... ]]
Un momento... tampoco podría ejecutar kill por el mismo razonamiento por el que no pude ejecutar ps. Estos trastos. Hmmmm... ¿Dónde falla entonces el razonamiento?
© 2002 Guillermo González Talaván.