• Domingo 22 de Diciembre de 2024, 02:44

Autor Tema:  Lanzamiento De Hijos En Backgrund  (Leído 5441 veces)

AbBaDoN

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Lanzamiento De Hijos En Backgrund
« en: Martes 25 de Mayo de 2004, 02:48 »
0
Tengo un problema con comunicacion entre procesos.

La comunicacion en si esta perfecta (el problema de los filosofos comensqales), pero no logro lanzar hijos en modo background. La programacion esta hecha en c, pero bajo la plataforma de linux.

Estoy usando un fork para la creacion del hijo, y luego un execvp con un arreglo de parametros mas o menos asi:

char * arg[] = {"./filosofo", "1", "&", ""};
int pid;

if ((pid = fork()) == 0) {
           execvp(arg[0], arg);
}

El & es para ejecucion en modo background, pero bajo shell, de todas maneras he probado con y sin el &, dando como resultado un hijo en <defunct> sin el & y nada si le coloco el &.

Si alguno me puede indicar como los puedo lanzar a los hijos (Debo conocer los pids dentro del programa que los lanza) en modo background desde un codigo en C...

NRM

  • Miembro MUY activo
  • ***
  • Mensajes: 279
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.narrowmind.com.ar
Re: Lanzamiento De Hijos En Backgrund
« Respuesta #1 en: Martes 25 de Mayo de 2004, 04:27 »
0
No soy un experto en el tema IPC, pero tal vez te pueda dar una mano.
No entendi muy bien por que queres ejecutar el proceso en background, si podes me gustaria que amplies un poco mas tu problema y la funcion que cumple tu aplicacion asi podria ayudarte mejor.

Aca posteo un ejemplo de como crear un proceso hijo y procesar su salida, de una forma muy simple, espero te sirva.

Código: Text
  1. #include &#60;stdio.h&#62;
  2.  
  3. int main ()
  4. {
  5. FILE *fd;
  6. char *comando = &#34;who&#34;;
  7. char buffer[1024];
  8.  
  9.   if (( fd = popen (comando, &#34;r&#34;)) != NULL)
  10.   {
  11.     while ((fgets (buffer, 1024, fd)) != NULL)
  12.       printf (&#34;%s&#34;, buffer);
  13.   }
  14.  
  15.   pclose (fd);
  16.   return (0);
  17. }
  18.  
  19.  

Si esto realmente no te sirve, espero tu respuesta asi trato de ayudarte.

Saludos

AbBaDoN

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Lanzamiento De Hijos En Backgrund
« Respuesta #2 en: Martes 25 de Mayo de 2004, 18:49 »
0
No se si conoces el problema de los filosofos comensales, pero es mas o menos asi:
hay cinco filosofos que se sientan a comer en una mesa y deben competir por el uso de los cubiertos. Los cubiertos son los recursos que les doy y los filosofos son programas que pelean por estos recursos. Aparte de esto, existe un sexto programa de monitoreo que constantemente esta verificando el estado de los filosofos.

Lo que yo necesito, es que el programa de monitoreo cree los recursos (que ya esta hecho) y lance los 5 filosofos en background (que no me sale), para poder quedarse con la terminal e informar por la pantalla cada cambio acontecido.

Por eso necesito lanzarlos en background. De todas maneras, la comunicacion entre procesos no falla, pero tengo que lanzar los programas por separado (individualmente) y lo que quiero es guardarme los pids de lanzamiento para que cuando se finalice el programa de monitoreo, este finalice tambien a los filosofos.

zid_adrenalyns

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Lanzamiento De Hijos En Backgrund
« Respuesta #3 en: Viernes 9 de Diciembre de 2005, 04:47 »
0
Cita de: "AbBaDoN"
No se si conoces el problema de los filosofos comensales, pero es mas o menos asi:
hay cinco filosofos que se sientan a comer en una mesa y deben competir por el uso de los cubiertos. Los cubiertos son los recursos que les doy y los filosofos son programas que pelean por estos recursos. Aparte de esto, existe un sexto programa de monitoreo que constantemente esta verificando el estado de los filosofos.

Lo que yo necesito, es que el programa de monitoreo cree los recursos (que ya esta hecho) y lance los 5 filosofos en background (que no me sale), para poder quedarse con la terminal e informar por la pantalla cada cambio acontecido.

Por eso necesito lanzarlos en background. De todas maneras, la comunicacion entre procesos no falla, pero tengo que lanzar los programas por separado (individualmente) y lo que quiero es guardarme los pids de lanzamiento para que cuando se finalice el programa de monitoreo, este finalice tambien a los filosofos.
ke onda, oye yo estoy resolviendo el problema de los filosofos, pero no tengo informacion suficiente para empezar a plantear la solución. me hace falta código de ejemplo en c para el manejo de ipc bajo linux. no tendrás por allí unos ejemplillos que me pases, porque todo lo que he encontrado esta en pascal.

gracias de antemano.

bob esponja

  • Miembro MUY activo
  • ***
  • Mensajes: 411
    • Ver Perfil
    • http://marianoguerra.blogspot.com
Re: Lanzamiento De Hijos En Backgrund
« Respuesta #4 en: Viernes 6 de Enero de 2006, 04:51 »
0
porque haces un fork para hacer un execv?
porque no haces por ejemplo cinco execv o sino usa el fork que te crea un proceso aparte para lo que necesitas....

fork devuelve el pid del hijo al padre y cero al hijo, asi que ahi tenes los pids.