Programación de Procesos en C

Iniciado por Adri58, 25 Noviembre 2010, 11:27 AM

0 Miembros y 1 Visitante están viendo este tema.

Adri58

Tengo que desarrollar un programa muy sencillo con procesos en C, pero no se muy bien como hacerlo. Necesito vuestra experta ayuda, simplemente quiero pistas de como podría realizarlo.
Abreviando mucho sería algo así:
"El proceso padre lanza 2 procesos. El primero hace x y el segundo y. Sigue pidiendo cadenas has que metamos por teclado la cadena "exit", matando a los 2 procesos."

Hasta el momento he hecho esto:


#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>

void proceso1(){
//puts(datos_leidos);
printf("Proceso1");
//sleep(200);
}

void proceso2 (){
/*int fich;
fich=open("fichero", O_RDWR | O_TRUNC, 0644);
//write(fich,datos_leidos,strlen(datos_leidos));
close(fich);*/
printf("Proceso2");
//sleep(200);
}

int main(){
pid_t hijo1;
pid_t hijo2;
char datos_leidos[40]="";
int fin=0;

hijo1=fork();
if(hijo1==0)//si se crea el proceso1
{
proceso1();
}
else if(hijo1>0)//proceso padre
{
hijo2=fork();
if(hijo2==0)//si se crea el proceso 2
{
proceso2();
}
else
{
printf("soy el padre");
printf("Introduce datos: ");
scanf("%s",datos_leidos);
if(strcmp(datos_leidos,"exit")==0)
//si se mete exit se mata a los hijos
{
kill (hijo1, SIGTERM);
kill (hijo2, SIGTERM);
return 0;
}
}
}
}


Se supone que fork() devuelve 0 si se ha creado bien el proceso, si no, es el padre no?
El problema es que no se como verificar que proceso esta corriendo.

Gracias de antemano por vuestro tiempo


Adri58

He estado haciendolo de nuevo y tengo esto, pero no me funciona y no se porque. Me sale un bucle infinito, si me podeis ayudar estaría muy agradecido:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>   

void proceso1(){
   printf("Proceso1");
}

void proceso2 (){
   printf("Proceso2");
}

int main(){
   pid_t hijo1;
   pid_t hijo2;
   char datos_leidos[40]="";
   
   printf("Introduce una cadena de texto: ");
   scanf("%s",datos_leidos);

   while(strcmp(datos_leidos,"exit")!=0){
      hijo1=fork();
      if(hijo1==0)
         proceso1();
      else
      {
         hijo2=fork();
         if(hijo2==0)
            proceso2();
         else{
            printf("Introduce una cadena de texto: ");
            scanf("%s",datos_leidos);
         }
      }         
   }
   kill(hijo1,SIGKILL);
   kill(hijo2,SIGKILL);
   return 0;
}