www.davidarcos.net/2007/05/09/en-las-profesiones-serias-esto...
por
Adrian el 09-05-2007 19:28 UTC, publicado el 10-05-2007 01:05 UTC
En cuanto hablas de procesos con alguien windowsero o del mundo exterior... ¿que coño es eso?
negativos:
2 usuarios:
261 anónimos:
0 compartir:

Los zombies mueren al matar al padre, hasta ahí correcto, pero es una chapuza hacer eso. El proceso hijo queda zombie a la espera que se lea la información que dió al terminar. Para leerla se puede usar waitpid() <sop.upv.es/sso/transparencias/proc/tsld011.htm;, por ejemplo así:
int main(int argc, char **argv)
{
int status;
pid_t PID_Hijo;
PID_Hijo=fork();
if(!PID_Hijo) exit(0);
else
while(1){waitpid(PID_Hijo,&status,WNOHANG);}
return 1;
}
Así se quita de la tabla de procesos correctamente.
NOTA: Para terminar haced Ctrl+C XD
vaya guarrería, las personas serias utilizan plan9 jejejejejejejeje
int main()
{
while(1)
{fork();}
return 1;
}
En las profesiones serias la gente envía enlaces que apuntan a la noticia, no a los comentarios ;-)
¿Nadie se ha dado cuenta hasta el voto número 60? xD
PD: Es broma, si te fijas bien en el bucle entra una vez, y no crea procesos dentro de él.
salu2 ;)
–-
El mecanismo de procreación, tanto para elfos como para hobbits, consistirá en los siguientes pasos:
1. La parte femenina de la pareja mostrará su disponibilidad para la procreación enviando la señal SIGUSR1 a su pareja.
2. La parte masculina, una vez recibida la señal, responde a su pareja enviando la señal SIGUSR1.
3. La parte femenina decide cuántas veces se ha de repetir los dos pasos anteriores al azar (entre 2 y 11, úsese la función rand()).
4. Una vez satisfecha, y como no necesita más de la parte masculina, le envía la señal SIGTERM. Su pareja muere, por consiguiente.
5. La parte femenina, finalmente, tiene un proceso hijo. La única diferencia en el proceso de procreación de hobbit y elfos está en que los elfos lo realizan sin consumir CPU mientras que los hobbits (al igual que los humanos, por cierto) sí que la consumen y realizan espera ocupada.
–-
Eso es de una, y aquí va otro cacho...
–-
La lucha entre los dos magos seguirá las siguientes reglas:
1. El campo de batalla es una zona de memoria compartida donde se aloja una variable energia de tipo long long.
2. La variable energia comenzará con el valor de 200000.
3. Gandalf, cuando tenga la CPU, incrementará la variable energia en pasos de dos en dos.
4. Por su parte, Saruman, en posesión de la CPU, decrementará la variable energia de uno en uno.
5. Cuando la variable supere o sea igual a 600000, Gandalf ganará.
6. Si la variable toma valor negativo, es Saruman el vencedor.
7. Mientras dure la lucha, se producirá una salida a tiempo real por la pantalla:
+ Se usarán los códigos del terminal VT100 que se han proporcionado en el resumen de las llamadas al sistema.
+ Al principio, se limpiará la pantalla.
+ En la séptima línea, empezando a contar por la parte superior de la pantalla, se escribirá SARUMAN, 62 espacios en blanco para el campo de batalla y GANDALF.
+ Mientras dure la batalla, se posicionará el cursor en los 62 espacios en blanco, según vaya progresando la lucha. Esto es, cuando la variable energia valga 0, el cursor se posicionará sobre el segundo espacio, cerca de SARUMAN. Si alcanza su valor límite, el cursor se pondrá sobre el espacio sexagéximo segundo. En una situación intermedia el cursor se posicionará proporcionalmente al valor de la energía.
–-
A alguno con unos enunciados tan divertidos seguro que le está molando la idea de hacer ingeniería informática pero... que se os quite esa idea de la cabeza xD ;-)
El while(1) no es necesario, para nada. Solo va a morir una vez el hijo... además, solo hay uno :-) -> waitpid(PID_Hijo,&status,0); o wait(&status);
Por otra parte... al morir el padre, en Linux 2.6 se matan los procesos huérfanos, úsease, no es necesario enterrarlos.
Tolkien: avellano.usal.es/~labssoo/pract104.htm
En cuanto a la noticia,como no le veo la gracia ni el interes por ningun sitio,será que soy un windowsero .
#20 totalmente deacuerdo ,no creo que hubiese llegado a portada de no incluir la referencia a los windowseros, y basicamente me parece una gilipollez de noticia)
Aleh!
Tambien es casualidad leer esta noticia cuando en el curro estoy peleandome precisamente con los:
CreateThread()
WaitForSingleObject()
CreateMutex()
KillThread()
...
Argg, malditos zombies. (tomo nota de lo de la recortada)
De toda la vida de Dios... si el padre muere, los hijos son adoptados por Init (pid = 1).
Pero reconozco que también pensaba que era un juego de rol...
En windows existen procesos, hilos, y se pueden matar, y a fe mía que se pueden quedar "zombies" (aunq esa no sea la nomenclatura más usada).
Se confunde "usuario" de un sistema operativo, que no tiene pq saber q coño es un proceso (o es q el usuario de un telefono movil tiene q saber q es una portadora, un bucle de abonado o un tono DTMF para poder usarlo?) con el programador o técnico o ingeniero que conoce y manipula ese sistema.
Lo q pasa es q linux tiene muy pocos usuarios ajenos al mundo de la informática, pero eso, me temo, no puede ser considerado precisamente una virtud.
oh wait!
Si te creas un programa que cree un hijo ,y muere el hijo, y luego muere el padre, si haces ps -aux verás que efectivamente ambos se han borrado de la tabla de procesos. El propio kernel se encarga dequitarlos de la tabla de procesos.
Ahora piensa en un programa un poquito más complejo. Pongamos un árbol de unos 25 procesos hijos, cada uno ejecutando una tarea, y el padre gestionando la comunicación entre ellos. Si uno de los hijos muere, si observas la tabla de procesos (ps -aux nuevamente), verás que el que ha muerto tiene el indicativo Z . Se ha quedado, efectivamente zombie. Y así se quedará hasta que muera el padre, o hasta que se lea su información de finalización.
Por supuesto pongamos un sistema en tiempo real crítico; El padre no puede ser terminado bajo ningún concepto, por lo tanto tienes que limpiar los procesos que has terminado. No hacerlo se considera un fallo en el programa, una mala costumbre, y además una chapuza propia de no haber entendido un carajo en clases de SSOO.
Es posible que en el código haya cosas innecesarias. Modifiquémoslo:
int main(int argc, char **argv)
{
int status;
pid_t PID_Hijo;
PID_Hijo=fork();
if(!PID_Hijo) exit(0);
else{
sleep(50000);
waitpid(PID_Hijo,&status,WNOHANG);
}
return 1;
}
Ejecuta, y mientras dura el sleep, comprueba en otra consola la tabla de procesos; verás un maravilloso ZOMBIE.
Y luego me cuentas.... ;)