Clases de Laboratorio del 12-05-2010
+3
marian fernandez
xiomelys padilla
Luis Hurtado
7 participantes
Página 1 de 1.
Clases de Laboratorio del 12-05-2010
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
Adicionalmente vamos a preparar nuestra memoria usb para trabajar con linux
Re: Clases de Laboratorio del 12-05-2010
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 xiomelyshoepp itamarfer4nandez anny
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 xiomelyshoepp itamarfer4nandez anny
xiomelys padilla- Mensajes : 1
Puntos : 2
Reputación : 1
Fecha de inscripción : 12/05/2010
Re: Clases de Laboratorio del 12-05-2010
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
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
Re: Clases de Laboratorio del 12-05-2010
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 ()
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
Re: Clases de Laboratorio del 12-05-2010
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
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
Re: Clases de Laboratorio del 12-05-2010
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
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
Re: Clases de Laboratorio del 12-05-2010
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
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
Re: Clases de Laboratorio del 12-05-2010
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
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 : 34
Temas similares
» Clases de Laboratorio del 05-05-2010
» Resumen de clases hasta el 5 de mayo de 2010
» Clase del 2010-05-11 Planificador de Procesos - Algoritmos de Plantificación
» Clase del 2010-05-04 Planificador de Procesos - Algoritmos de Planificacion
» Clase del 2010-05-06 Planificador de Procesos - Algoritmos de Planificacion
» Resumen de clases hasta el 5 de mayo de 2010
» Clase del 2010-05-11 Planificador de Procesos - Algoritmos de Plantificación
» Clase del 2010-05-04 Planificador de Procesos - Algoritmos de Planificacion
» Clase del 2010-05-06 Planificador de Procesos - Algoritmos de Planificacion
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
Miér Mar 23, 2022 4:06 pm por VictorMora
» 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