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
Buscar
 
 

Resultados por:
 


Rechercher Búsqueda avanzada

Últimos temas
» saludoos y geovision
Mar Ago 21, 2012 3:16 pm por jguedez99

» Gracias por el foro......
Lun Ago 13, 2012 6:31 pm por antxon

» Ejercicios de algoritmos
Miér Mar 23, 2011 5:48 am por Luis Hurtado

» Planificacion y Plan de evaluacion
Vie Mar 18, 2011 9:22 pm por Katerine D Gutièrrez

» Asignacion Nro 1
Jue Mar 17, 2011 8:46 am por Luis Hurtado

» Dccionario de Terminos informaticos
Vie Ene 28, 2011 9:53 pm por Pedro Guzman xD

» Diccionario de palabras y expresiones informaticas
Jue Ene 27, 2011 8:02 pm por Julio Quiroz

» Asignación Glosario
Miér Ene 26, 2011 6:37 am por Luis Hurtado

» Proyecto de Sistemas Operativos - Comunicacion entre procesos
Dom Ene 23, 2011 8:50 pm por Luis Hurtado

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

Calendario Calendario


Clases de Laboratorio del 12-05-2010

Ver el tema anterior Ver el tema siguiente Ir abajo

Clases de Laboratorio del 12-05-2010

Mensaje por Luis Hurtado el 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 Antonio Hurtado Dasilva
Ingeniero en Informática - UNEG
Profesor Unefab - Upata
avatar
Luis Hurtado

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

http://hurtadoluis.blogspot.com

Volver arriba Ir abajo

Re: Clases de Laboratorio del 12-05-2010

Mensaje por xiomelys padilla el 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 al proceso hijo y
regresa el identificador del proceso hijo al proceso padre. En caso de
falla, fork() regresa 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

Re: Clases de Laboratorio del 12-05-2010

Mensaje por marian fernandez el 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

Re: Clases de Laboratorio del 12-05-2010

Mensaje por marian fernandez el 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

Re: Clases de Laboratorio del 12-05-2010

Mensaje por ramses el 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

Re: Clases de Laboratorio del 12-05-2010

Mensaje por erika gomez el 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.

while (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

Re: Clases de Laboratorio del 12-05-2010

Mensaje por orlando el 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

Re: Clases de Laboratorio del 12-05-2010

Mensaje por jhonatan el 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 : 27

Volver arriba Ir abajo

Re: Clases de Laboratorio del 12-05-2010

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

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