Programación General > C/C++
recomendacionea para matar este proceso??
pacorubio77:
Hola,no entiendo muy bien lo de la programacion concurrente,y veo que el valor de un vector no sale fuera de un exit?
explico mi caso,,yo solo quiero hacer lo siguiente ,un padre cree tres hijos y de esos tres hijos el segundo cree otro hijo,mi problema es a la hora de matar este ultimo hijo....como es normal tengo que matar de abajo hacia arriba...y yo he pensado almacenarme el getpid de este ultimo hijo en una posicion del vector y matarlo...para mi sorpresa que cuando salgo de donde lo creo ...ya no tengo el valor en mi posicion del vector....(en el codigo represento en pantalla como v1).
graficamente tengo que hacer lo siguiente:
Pongo el código para ver si vosotros me podeis explicar porque ese valor no se guarda y si veis otra forma mejor de matarlo.....
Espero ayuda,
--- Citar ---#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(){
int pid;
int i=0;
int eo;
int valor;
int tiempo=20;
int v[10];
int n=0;
for (i=0;i<3;i++)
{
pid=fork();
if(pid==0)
{
printf("el pid es: %dn",pid);
printf("el otro pid es: %dn",getpid());
//creo un hijo
if(i==1)
{
pid=fork();
v[n]=getpid();
printf("v %dn",v[n]);
if(pid==0)
{
printf("MACARRON %dn",pid);
printf("EL OTRO LADO: %dn",getpid());
sleep(3);
printf("MAN MATAO %dn",getpid());
int j;
/*
for(j=0;j<3;j++){
printf("se mete j %dn",j);
pid=fork();
if(pid==0){ //esta creando hijos
printf("MACARRON %dn",pid);
printf("EL OTRO LADO1: %dn",getpid());
//sleep(3);
exit(0);
}
//exit(0);
}
sleep(5);
//printf("aqui salen");
exit(0);
*/
}
sleep(5);
exit(0);
}
sleep(15);
exit(0);
}
printf("v1 %dn",v[n]);
}
sleep(10);
int status;
waitpid(v[0], &status, 0);
printf("soy el proceso con pid %d y he terminadon",v[0]);
for(i=0;i<3;i++)
{
valor=wait(&eo);
printf("man matao %dn",valor);
}
//el pid del padre
printf("man matao1 %dn",getpid());
exit(0);
return(0);
}
//compilar gcc nombre -o p1
--- Fin de la cita ---
m0skit0:
Creo que tu error radica básicamente en que no actualizas el valor de n, que usas como índice de v[]. Si vas a usar un solo valor, ¿para qué usas un vector?
El segundo hijo y su hijo (el nieto de proceso principal), escriben ambos en v[0] sin distinción, así que al final no sabes si en v[0] tienes el PID del segundo hijo o el PID del nieto.
El proceso principal no es quien debe esperar al nieto, sino el proceso que lo crea, es decir, el segundo hijo.
P.D: como consejo, haz una función para el código ejecutado por los hijos en vez de poner todo junto, lo verás mucho más claro, tipo:
--- Código: C ---if (pid==0) hijo_main(); Y utiliza las etiquetas de código, no de cita :P
Salud
pacorubio77:
Hola,muchas gracias por el interés...pero de guardar en el vector ese hijo es porque ese me da problemas ,al salir de todo no me guarda en el vector ,y no aún cual es la razón...y he pensado guardar en el vector para luego matar el proceso,,,pero si has ejecutado el código ,verás que el valor no se guarda al salir del proceso.....y cual puede ser la razón....principal? otra cosa,cuando me dices que me haga una funcion para poner el código ejecutado por los hijos ,que quieres decir en concreto,? eso no te entendí bien....
Espero respuesta.
Gracias.
m0skit0:
--- Cita de: "pacorubio77" ---pero si has ejecutado el código ,verás que el valor no se guarda al salir del proceso
--- Fin de la cita ---
No puedo ejecutarlo en estos momentos, pero tú si me puedes decir qué valor te pone... ¿Es un valor incorrecto o es el valor de otro proceso? También sería buena idea hacer un printf() del PID del proceso nieto nada más entrar en él, como haces con los hijos en
--- Cita de: "pacorubio77" ---printf("el pid es: %dn",pid);
printf("el otro pid es: %dn",getpid());
--- Fin de la cita ---
Aparte, es tontería la sentencia printf("el pid es: %dn",pid); porque ya sabes que es 0 por el if anterior :P
--- Cita de: "pacorubio77" ---otra cosa,cuando me dices que me haga una funcion para poner el código ejecutado por los hijos ,que quieres decir en concreto,? eso no te entendí bien....
--- Fin de la cita ---
Simplemente no poner todo el código en main(), sino hacer una función aparte con el código de los hijos, así resulta más entendible. Sólo es un consejo personal para que mejores la presentación de tu código, nada más. No añade funcionalidad ni corrige el error.
pacorubio77:
Si,,si imprimo el valor,pero me sale un valor (como cuando no inicializas algo), es decir al principio en esa posicion si tiene el pid del proceso,pero al salir de todos los bucles ya no tengo valor ninguno....y no consigo entender eso......
Navegación
[#] Página Siguiente
Ir a la versión completa