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.