#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
pero si has ejecutado el código ,verás que el valor no se guarda al salir del procesoNo 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
printf("el pid es: %dn",pid);
printf("el otro pid es: %dn",getpid());
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....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.
al principio en esa posicionSalud
el problema es que solo puedo utilizar fork , y para matar pues exit,wait,waitpid y todo eso...Yo en ningún momento en dicho que no uses fork(). No sé a qué viene tu afirmación. Lo que debes hacer es esperar con waitpid() (estas llamadas no matan, sino ponen en bloqueo a los procesos hasta que otros cambien de estado) a los 3 procesos hijos, y que el segundo espere a su hijo y punto, no tiene más complicación. No necesitas compartir las variables porque eso lo hace más complicado todavía. Sólo el segundo hijo necesita saber del nieto, al padre no le hace falta.
Sobre lo de ponerlo bonito es lo último, primero tengo que ver los efectos de dicho programa y que salga lo que quiero,,porque por ahora me estoy haciendo un poco lio al no ser todo secuencial.....No se trata de ponerlo "bonito", como tú dices, sino entendible, que son dos cosas diferentes. Tú mismo.
(estas llamadas no matan, sino ponen en bloqueo a los procesos hasta que otros cambien de estado)
al menos en Unix, nunca tendras un PID igual a 0, y menos si un usuario lo ejecuta...Tienes razón, pero no. Desde luego en POSIX no hay PID = 0 da igual si lo ejecuta el usuario o no. Pero este no es un PID real. Es el valor que devuelve fork() para el proceso hijo, de ahí hijo_main(). Con getpid() obtendrías el PID. Como veo que no estás familiarizado con fork(), haz un man 2 fork (http://www.manpagez.com/man/2/fork/).
pero de manera recursiva ya si que no puedo matar los procesossssss.....que alguien me ayudeeeeeeeNo te preocupes, seguro que es más fácil de lo que ahora parece ;)
es necesario que ponga codigo?Creo que es evidente, ¿no te parece?
que alguien que busque y tenga que entregar la misma practica...lo copieBueno, con todo el respeto, eso es asunto tuyo, no mío.
:angry: Es la mala costumbre que te dejan ciertos scripts... ya que normalmente yo puede hacer algo como esto:Cita de: "su -"al menos en Unix, nunca tendras un PID igual a 0, y menos si un usuario lo ejecuta...Tienes razón, pero no. Desde luego en POSIX no hay PID = 0 da igual si lo ejecuta el usuario o no. Pero este no es un PID real. Es el valor que devuelve fork() para el proceso hijo, de ahí hijo_main(). Con getpid() obtendrías el PID. Como veo que no estás familiarizado con fork(), haz un man 2 fork (http://www.manpagez.com/man/2/fork/).
Salud
Pongo el código:huh: :blink: