Foro del Profesor Luis Hurtado Dasilva
Registrate para poder escribir y responder en los foros. Cuando vayas a Crear tu usuario utiliza tu primer nombre y primer apellido para el nombre de usuario, con la primera letra en mayúscula y las demás en minúsculas, ejemplo: Nombre Apellido

Unirse al foro, es rápido y fácil

Foro del Profesor Luis Hurtado Dasilva
Registrate para poder escribir y responder en los foros. Cuando vayas a Crear tu usuario utiliza tu primer nombre y primer apellido para el nombre de usuario, con la primera letra en mayúscula y las demás en minúsculas, ejemplo: Nombre Apellido
Foro del Profesor Luis Hurtado Dasilva
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.
Buscar
 
 

Resultados por:
 


Rechercher Búsqueda avanzada

Últimos temas
» TARJETA GV 600s V 3.21
Clases de Laboratorio del 12-05-2010 EmptyMiér Mar 23, 2022 4:06 pm por VictorMora

» saludoos y geovision
Clases de Laboratorio del 12-05-2010 EmptyMar Ago 21, 2012 3:16 pm por jguedez99

» Gracias por el foro......
Clases de Laboratorio del 12-05-2010 EmptyLun Ago 13, 2012 6:31 pm por antxon

» Ejercicios de algoritmos
Clases de Laboratorio del 12-05-2010 EmptyMiér Mar 23, 2011 5:48 am por Luis Hurtado

» Planificacion y Plan de evaluacion
Clases de Laboratorio del 12-05-2010 EmptyVie Mar 18, 2011 9:22 pm por Katerine D Gutièrrez

» Asignacion Nro 1
Clases de Laboratorio del 12-05-2010 EmptyJue Mar 17, 2011 8:46 am por Luis Hurtado

» Dccionario de Terminos informaticos
Clases de Laboratorio del 12-05-2010 EmptyVie Ene 28, 2011 9:53 pm por Pedro Guzman xD

» Diccionario de palabras y expresiones informaticas
Clases de Laboratorio del 12-05-2010 EmptyJue Ene 27, 2011 8:02 pm por Julio Quiroz

» Asignación Glosario
Clases de Laboratorio del 12-05-2010 EmptyMiér Ene 26, 2011 6:37 am por Luis Hurtado

Navegación
 Portal
 Índice
 Miembros
 Perfil
 FAQ
 Buscar
Marzo 2024
LunMarMiérJueVieSábDom
    123
45678910
11121314151617
18192021222324
25262728293031

Calendario Calendario


Clases de Laboratorio del 12-05-2010

+3
marian fernandez
xiomelys padilla
Luis Hurtado
7 participantes

Ir abajo

Clases de Laboratorio del 12-05-2010 Empty Clases de Laboratorio del 12-05-2010

Mensaje por Luis Hurtado Miér Mayo 12, 2010 3:13 pm

Hoy vamos a ver como se utiliza la funcion fork() y vamos a publicar una respuesta a este tema explicando su uso y un pequeño ejemplo.

Adicionalmente vamos a preparar nuestra memoria usb para trabajar con linux
Luis Hurtado
Luis Hurtado

Mensajes : 62
Puntos : 138
Reputación : 7
Fecha de inscripción : 03/05/2010
Edad : 48
Localización : Upata, Estado Bolivar

http://hurtadoluis.blogspot.com

Volver arriba Ir abajo

Clases de Laboratorio del 12-05-2010 Empty Re: Clases de Laboratorio del 12-05-2010

Mensaje por xiomelys padilla Miér Mayo 12, 2010 3:36 pm

La función int fork() cambia un proceso único en 2 procesos
idénticos, conocidos como el padre (parent) y el hijo (child).
En caso de éxito, fork() regresa Clases de Laboratorio del 12-05-2010 Img2 al proceso hijo y
regresa el identificador del proceso hijo al proceso padre. En caso de
falla, fork() regresa Clases de Laboratorio del 12-05-2010 Img36 al proceso padre, pone
un valor a errno, y no se crea un proceso hijo.

El proceso hijo tendrá su propio identificador único (PID).

El siguiente programa ilustra un ejemplo sencillo del uso de fork,
donde dos copias son hechas y se ejecutan juntas (multitarea).


/* fork.c - Ejecución conjunta de procesos padre e hijo */
#include <stdio.h>
#include <unistd.h>
main ()
{
printf ("Ejemplo de fork.\n");

printf ("Inicio del proceso padre. PID=%d\n", getpid ());
if (fork() == 0)
{ /* Proceso hijo */
printf ("Inicio proceso hijo. PID=%d, PPID=%d\n",
getpid (), getppid ());
sleep (1);
}
else
{ /* Proceso padre */
printf ("Continuación del padre. PID=%d\n", getpid ());
sleep (1);
}
printf ("Fin del proceso %d\n", getpid ());
exit (0);
}

padilla xiomelys
hoepp itamarfer4nandez anny

xiomelys padilla

Mensajes : 1
Puntos : 2
Reputación : 1
Fecha de inscripción : 12/05/2010

Volver arriba Ir abajo

Clases de Laboratorio del 12-05-2010 Empty Re: Clases de Laboratorio del 12-05-2010

Mensaje por marian fernandez Miér Mayo 12, 2010 3:38 pm

Marian Fernandez, Lucia Viamonte, Naileth Fernandez y yessika alvarez





Un fork, cuando se aplica en
el contexto de un lenguaje de programación o un sistema operativo, hace referencia a la
creación de una copia de sí mismo por parte de un programa, que entonces actúa como un
"proceso hijo"
del proceso originario, ahora llamado "padre".
Los procesos resultantes son idénticos, salvo que tienen distinto número de
proceso (PID).
En el caso concreto del sistema operativo UNIX, la llamada al sistema fork permite
realizar una bifurcación de este tipo. Esta llamada devuelve el PID del proceso
hijo al padre y un 0 al hijo.


un ejemplo de fork seria:

pid_t pid = fork();
int i;
main()
if(pid == 0)
{
/* Proceso hijo:
* Cuando fork() devuelve 0, estamos en
* el proceso hijo.
* Aquí contamos hasta diez, uno cada segundo.
*/
for(i=0; i < 10; i++)
{
printf("hijo: %d\n", i);
sleep(1);
}
_exit(0); /* nota: exit en lugar de _exit */
}
else if(pid > 0)
{
/* Proceso padre:
* Sino estamos en el proceso padre.
* De nuevo contamos hasta diez.
*/
for(i=0; i < 10; i++)
{
printf("padre: %d\n", i);
sleep(1);
}
}
else
{
/* ha ocurrido un error. */
fprintf(stderr, "no se ha podido bifurcar");
exit(1);
}


fork() y wait() trabajan con llaves ()
ejemplo de esto es:

"Crear un programa que haga que un hijo haga una suma de números pasados
por
parámetro en la llamada al programa (argv) para que después, cuando el
hijo
muera, devuelva al programa padre la suma de dichos números (utilice la
función wait)"

La solución es esta:

#include
#include
#include
#include

int main(int argc, char *argv[])
{
int status, sum = 0;
pid_t child;
child = fork();
if (child == -1) {
std::cerr

marian fernandez

Mensajes : 4
Puntos : 6
Reputación : 0
Fecha de inscripción : 05/05/2010

Volver arriba Ir abajo

Clases de Laboratorio del 12-05-2010 Empty Re: Clases de Laboratorio del 12-05-2010

Mensaje por marian fernandez Miér Mayo 12, 2010 3:43 pm

Marian Fernandez, Lucia Viamonte, Naileth Fernandez y yessika alvarez

Un
fork, cuando se aplica en
el contexto de un lenguaje de programación
o un sistema operativo, hace
referencia a la
creación de una copia de sí mismo por parte de un programa, que entonces
actúa como un
"proceso hijo"
del proceso originario,
ahora llamado "padre".
Los procesos
resultantes son idénticos, salvo que tienen distinto número de
proceso
(PID).
En el caso concreto del sistema
operativo UNIX, la llamada al sistema fork
permite
realizar una bifurcación de este tipo. Esta llamada devuelve
el PID del proceso
hijo al padre y un 0 al hijo.
un ejemplo de fork seria:

pid_t pid = fork();
int i;

main()
if(pid == 0)
{
/* Proceso hijo:
*
Cuando fork() devuelve 0, estamos en
* el proceso hijo.

* Aquí contamos hasta diez, uno cada segundo.
*/

for(i=0; i < 10; i++)
{
printf("hijo: %d\n",
i);
sleep(1);
}
_exit(0); /* nota: exit en
lugar de _exit */
}
else if(pid > 0)
{

/* Proceso padre:
* Sino estamos en el proceso padre.

* De nuevo contamos hasta diez.
*/
for(i=0; i <
10; i++)
{
printf("padre: %d\n", i);

sleep(1);
}
}
else
{
/* ha
ocurrido un error. */
fprintf(stderr, "no se ha podido
bifurcar");
exit(1);
}

fork() y wait() trabajan con llaves ()

marian fernandez

Mensajes : 4
Puntos : 6
Reputación : 0
Fecha de inscripción : 05/05/2010

Volver arriba Ir abajo

Clases de Laboratorio del 12-05-2010 Empty Re: Clases de Laboratorio del 12-05-2010

Mensaje por ramses Miér Mayo 12, 2010 3:45 pm

El fork genera un duplicado del proceso actual. El duplicado comparte los valores actuales de todas las variables, ficheros y otras estructuras de datos. La llamada a fork retorna al proceso padre el identificador del proceso hijo y retorna un cero al proceso hijo.
fork() crea un nuevo proceso exactamente igual (mismo código) al proceso que invoca la función. Ambos procesos continúan su ejecución tras la llamada fork(). En caso de error, la función devuelve el valor -1 y no se crea el proceso hijo. Si no hubo ningún error, el proceso padre (que realizó la llamada) recibe como resultado el pid del proceso hijo que acaba de nacer, y el proceso hijo recibe el valor 0.
Veamos un ejemplo de uso de estas funciones: #!/usr/local/bin/perl5.8.0 -w

print "PID=$$\n";

my $child = fork();
die "Falló el fork: $!" unless defined $child;

if ($child > 0) { # proceso padre
print "Aqui proceso padre: PID=$$, hijo=$child\n";
} else { #proceso hijo
my $ppid = getppid();
print "Aqui proceso hijo: PID=$$, padre=$ppid\n";
}
wit Descripción: Espera a que pare o termine un proceso hijo, permitiendo obtener sus estados de salida. Una señal no bloqueada o no ignorada puede reactivar el proceso padre. - Formato: #include pid_t wait (estados) int *estados; pid_t wait ((void *) 0); pid_t waitpid (PID, estados, opciones) pid_t PID; int *estados, opciones;

ranses fernande, gregori gracia, rossiel blanca

ramses

Mensajes : 3
Puntos : 3
Reputación : 0
Fecha de inscripción : 05/05/2010

Volver arriba Ir abajo

Clases de Laboratorio del 12-05-2010 Empty Re: Clases de Laboratorio del 12-05-2010

Mensaje por erika gomez Miér Mayo 12, 2010 3:50 pm

la funcion fork cambia un proceso unico en dos procesos identicos, conocidos como el `padre (parent) y el hijo (child). en caso de exito fork regresa al proceso hijo y regresa el identificador del proceso hijo al proceso padre. en caso de falla regresa al proceso padre y pone un valor a ermo y no se crea el proceso hijo. el proceso hijo tendra su propio identificador unico (PID)

en lo siguiente se ilustra un ejemplo sencillo de fork.
Clases de Laboratorio del 12-05-2010 Moz-screenshot-2Clases de Laboratorio del 12-05-2010 Moz-screenshot-3Clases de Laboratorio del 12-05-2010 Moz-screenshot-4
Clases de Laboratorio del 12-05-2010 Moz-screenshot-5Clases de Laboratorio del 12-05-2010 Moz-screenshot-6while (true) { /* repetir siempre */
read_command(command,parameters); /*leer entrada de laterminal*/

if(fork() != 0) { /*bifucar proceso hijo */
/* codigo del padre.*/
waitpid(-1, &status, 0); /* esperar que el hijo salga */
} else {
/* codigo del hijo.*/
execve(command,parameters, 0); /* ejecutar comandos */
}
}


raelizado por: gomez erika y marabay maria

erika gomez

Mensajes : 7
Puntos : 7
Reputación : 0
Fecha de inscripción : 11/05/2010

Volver arriba Ir abajo

Clases de Laboratorio del 12-05-2010 Empty Re: Clases de Laboratorio del 12-05-2010

Mensaje por orlando Miér Mayo 12, 2010 3:55 pm

FORK: es un programa que se encarga de clonar y
duplicar los procesos que se están ejecutando, es de allí de donde nace padre e
hijo, ya que hijo se diferencia por códigos.


Teniendo en cuenta que hijo es una extensión del
padre, el FORK tiene como finalidad principal servir de herramienta a la hora
de necesitar muchas opciones del proceso y asi duplicar hasta que sea
necesario.





Ej:


main()


{


int
valor_regr=0;






printf("Bifurcando
el proceso\n");



valor_regr=fork();


printf("El
id del proceso es %d y el valor regresado es %d\n",



getpid(),
valor_regr);



execl("/bin/ls","ls","-l",0);


printf("Esta
linea no es impresa\n");



}





Integrantes:


Jesús Moreno


Coa Katerine


Rodríguez José


Belisario Emmanuel


Campos Orlando


Aguinagalde Juliana


Guerra Marianny


Gutiérrez Corintia

orlando

Mensajes : 8
Puntos : 17
Reputación : 1
Fecha de inscripción : 05/05/2010

Volver arriba Ir abajo

Clases de Laboratorio del 12-05-2010 Empty Re: Clases de Laboratorio del 12-05-2010

Mensaje por jhonatan Miér Mayo 12, 2010 4:09 pm

fork:es un programa que se encarga de clonar y duplicar los procesos que se estan ejecutando, es de alli donde nace padre e hijo. ya que hijo se diferencias por codigos,teniendo en cuenta que hijo es una extencion del padre. el fork tiene como finalidad servir de herramienta a la hora de necesitar de muchas opciones y duplicar hasta que sea necesario.

Veamos un ejemplo de uso de estas funciones:
#!/usr/local/bin/perl5.8.0 -w

print "PID=$$\n";

my $child = fork();
die "Falló el fork: $!" unless defined $child;

if ($child > 0) { # proceso padre
print "Aqui proceso padre: PID=$$, hijo=$child\n";
} else { #proceso hijo
my $ppid = getppid();
print "Aqui proceso hijo: PID=$$, padre=$ppid\n";
}
integrante:
jhonatan navarro
rosangela gomez
diliana moreno
sanchez jose luis

jhonatan

Mensajes : 7
Puntos : 15
Reputación : 0
Fecha de inscripción : 05/05/2010
Edad : 33

Volver arriba Ir abajo

Clases de Laboratorio del 12-05-2010 Empty Re: Clases de Laboratorio del 12-05-2010

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.