Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Adri58 en 25 Noviembre 2010, 11:27 am



Título: Programación de Procesos en C
Publicado por: Adri58 en 25 Noviembre 2010, 11:27 am
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:

Código:
#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


Título: Re: Programación de Procesos en C
Publicado por: darkraider en 25 Noviembre 2010, 14:17 pm
http://www.opengroup.org/onlinepubs/009695399/functions/fork.html (http://www.opengroup.org/onlinepubs/009695399/functions/fork.html)
 Alguna otra duda? Salu2


Título: Re: Programación de Procesos en C
Publicado por: Adri58 en 28 Noviembre 2010, 17:35 pm
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:
Código:
#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;
}