Creación de procesos

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
luis__cap
Forista Nuevo
Forista Nuevo
Mensajes: 3
Registrado: Dom Ene 23, 2011 4:08 am

Creación de procesos

Mensaje por luis__cap » Dom Ene 23, 2011 4:15 am

Hola, primero daros la enorabuena por la pagina, ya que me ayudo mucho con los ejercicios a la introduccion de linux. Queria haceros una pregunta, ya que ando muy perdido en el tema de creación de procesos. Necesito realizar tres procesos con las siguientes caracteristicas :

- pr11: Proceso que crea mediante un "execl" al proceso pr12 y crea
una copia de pr11 mediante un "fork".

Al empezar pr11 saca por pantalla el mensaje:

"Soy pr11 y mi pid es: <pid de pr11>"

Al empezar la copia de pr11 saca por pantalla el mensaje:

"Soy la copia de pr11 y mi pid es: <pid de copia de pr11>"


El original crea un fichero llamado "prac1.dat" y modifica la salida de
error del proceso pr12 para que este pueda escribir en el fichero
por la posicion 2 de la tabla de canales.

Antes de terminar pr11 original saca un mensaje que dice:

"Fin de pr11 original"


La copia escribe su pid en el fichero "prac1.dat".
Antes de terminar la copia de pr11 saca un mensaje que dice:

"Fin de la copia de pr11"


- pr12: Proceso que crea mediante un "execl" al proceso pr13.

Al empezar pr12 saca por pantalla el mensaje:

"Soy pr12 y mi pid es: <pid de pr12>"

Escribe su pid en el fichero "prac1.dat", utilizando la posicion de
error de la tabla de canales.

Antes de terminar pr12 saca un mensaje que dice:

"Fin de pr12"


- pr13: Al empezar pr13 saca por pantalla el mensaje:

"Soy pr13 y mi pid es: <pid de pr13>"


Abre el fichero "prac1.dat", lee el pid del proceso pr12 y
el pid de "pr11 copia" y visualiza los siguientes mensajes por pantalla:

"Soy pr13 y el pid de pr12 es: <pid de pr12>"
"Soy pr13 y el pid de pr11 copia es: <pid de pr11 copia>"


Antes de terminar pr13 saca un mensaje que dice:

"Fin de pr13"

El principio lo comprendo, el crear copia y hijos, pero cuando empieza con lo de modificar salida de errores me lio bastante, no lo entiendo :S por favor, si podeis ayudarme estaria muy agradecido. Gracias de antemano!!
Avatar de Usuario
mcun
Administrador
Administrador
Mensajes: 3888
Registrado: Lun Abr 19, 2010 12:30 am
Ubicación: En una de las nalgas del culo del mundo (según la Bersuit Vergarabat)
Contactar:

Re: Creación de procesos

Mensaje por mcun » Dom Ene 23, 2011 5:07 pm

pues no vi en tu post que hablaras de ningún lenguaje ¿ da igual que ea en bash o c++ o python o java ? deberías indicarlo también en el titulo
Los programadores de verdad no documentan. La documentación es para los idiotas que no pueden leer un volcado de memoria.

Trusted Network and Developer | Lee el Reglamento !! |WIKI-EL | Twitter @mr_mcun
Debian + TTY | ArchLinux + awesome | openSUSE + Gnome-Shell | Linux User #508809
luis__cap
Forista Nuevo
Forista Nuevo
Mensajes: 3
Registrado: Dom Ene 23, 2011 4:08 am

Re: Creación de procesos

Mensaje por luis__cap » Dom Ene 23, 2011 7:39 pm

es en c, la verdad que es en lo que mas me lio, en modificar la salida de errores asi como en guardar el PID en el segundo proceso en el fichero "prac1.dat", no me sale :S alguien me podria ayudar?? muchas graciass!!
Avatar de Usuario
mcun
Administrador
Administrador
Mensajes: 3888
Registrado: Lun Abr 19, 2010 12:30 am
Ubicación: En una de las nalgas del culo del mundo (según la Bersuit Vergarabat)
Contactar:

Re: Creación de procesos

Mensaje por mcun » Dom Ene 23, 2011 7:55 pm

pues yo de c no entiendo nada --> paciencia ;)
Los programadores de verdad no documentan. La documentación es para los idiotas que no pueden leer un volcado de memoria.

Trusted Network and Developer | Lee el Reglamento !! |WIKI-EL | Twitter @mr_mcun
Debian + TTY | ArchLinux + awesome | openSUSE + Gnome-Shell | Linux User #508809
Avatar de Usuario
maiku
Moderador
Moderador
Mensajes: 1521
Registrado: Jue Abr 19, 2007 7:00 am
Ubicación: Cojutepeque, El Salvador C. A.
Contactar:

Re: Creación de procesos

Mensaje por maiku » Dom Ene 23, 2011 10:59 pm

luis, disculpa que lo diga así, por lo general en espacio linux nadie resuelve ejercicios o tareas, se aportan ideas y se colabora leyendo y mejorando el código. Puedes colocar tu código y probablemente otros usuarios te darán buenas ideas (disculpa no lo haga yo, soy malo para C)

por otro lado, te recomiendo unas guías de C de mi universidad

http://www.udb.edu.sv/Academia/Laborato ... formSO.htm

en particular la guía #4 de procesos

http://www.udb.edu.sv/Academia/Laborato ... uia4SO.pdf

puede que te ayude un poco

Saludos :)
Grüße...
Maiku

Full linux alchemist!!!
luis__cap
Forista Nuevo
Forista Nuevo
Mensajes: 3
Registrado: Dom Ene 23, 2011 4:08 am

Re: Creación de procesos

Mensaje por luis__cap » Lun Ene 24, 2011 11:10 pm

gracias maiku!! me ha ayudado bastante!! lo llevo bastante adelantado, pero sigo teniendo dos problemas, cuando me guardan el PID en prac1.dat no me lo guarda bien, genera distintos caracteres, y el otro problema es que no consigo en el proceso pr13 leer los PID de los otros dos procesos y mostrarlos, se que se tiene que hacer ocn un read pero nose como :S os adjunto lo que llevo hecho por si me podeis ayudar porfavor:

PR11:


#include <stdio.h>
#include <unistd.h>

main(int argc, char *argv[])
{
int pr11HIJO;
int dir;
//printf("Soy pr11 y mi pid es: %d\n",getpid());
//creat("prac1.dat",0700);
dir=creat("prac1.dat",0700);
pr11HIJO=fork(); //creamos hijo pr11

if (pr11HIJO==0)
{
int aux=getpid();
write(dir,&aux,sizeof(aux));
close(2);
dup(dir);
sleep(1);
printf("Soy la copia de pr11 y mi pid es: %d\n",getpid());
execl("pr12.c","pr12.c",0);
//printf("fin de la copia de pr11");
}
else
{
printf("Soy pr11 y mi pid es: %d\n",getpid());
sleep(4);
printf("fin de la copia de pr11 \n");
sleep(7);
printf("Fin del proceso pr11 \n");
}

sleep(10);


}

PR12:

#include <stdio.h>
#include <unistd.h>
main() {
printf("Soy el proceso pr12 y mi pid es %d \n", getpid());
int aux2=getpid();
write(prac1.dat, aux2, sizeof(aux));
execl("prc13.c", "prc13.c", 0);
printf("fin del proceso pr12");
sleep(20);
}


PR13:


#include <stdio.h>
#include <unistd.h>
main() {
printf("Soy el proceso pr13 y mi pid es %d \n", getpid());
int aux=getpid();
write(prac1.dat, aux, sizeof(aux));
printf("fin del proceso pr13");
sleep(20);
}



muchas gracias!!
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: Creación de procesos

Mensaje por akodo » Mar Ene 25, 2011 11:20 pm

No sé hasta qué punto estaría bien (de hecho no creo que sea lo más adecuado), pero podrías pasar los pids como parámetros opcionales a los programas. Si el número de parámetros es mayor que 0 (sin contar el nombre del programa, que no sé si se cuenta o no como parámetro) has de suponer que dichos parámetros son pids.

La otra opción podría ser utilizar un fichero temporal para que los procesos escriban sus pids, y luego leer dicho archivo.
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje