universidad tecnológica nacional facultad regional buenos aires
DESCRIPTION
Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información. Sistemas Operativos. Funciones Útiles fork(). Fork() – Caso base. #include int main (void) { char c; printf("Ingrese un caracter\n"); c = getchar(); - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.vdocuments.co/reader036/viewer/2022071807/56812c2b550346895d90a6b3/html5/thumbnails/1.jpg)
Universidad Tecnológica Nacional
Facultad Regional Buenos AiresIngeniería en Sistemas de
Información
Funciones Útilesfork()
Sistemas Operativos
![Page 2: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.vdocuments.co/reader036/viewer/2022071807/56812c2b550346895d90a6b3/html5/thumbnails/2.jpg)
Fork() – Caso base
#include <stdio.h>
int main (void) {char c;printf("Ingrese un caracter\n");
c = getchar();printf(“Se ingresó: %c\n", c);
}
¿Cómo puedo hacer si quiero que si el usuario no presiona ninguna tecla imprima en pantalla el mensaje nuevamente cada un segundo?
![Page 3: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.vdocuments.co/reader036/viewer/2022071807/56812c2b550346895d90a6b3/html5/thumbnails/3.jpg)
Fork() – Introducción
Proceso ejecutando
- Código (solo lectura)- Datos (memoria dinámica)- Stack (asignaciones estáticas)
• Identificador único (PID)• Padre único• Tres estructuras de memoria
![Page 4: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.vdocuments.co/reader036/viewer/2022071807/56812c2b550346895d90a6b3/html5/thumbnails/4.jpg)
Fork() – Introducción
UID PID PPID C STIME TTY TIME CMDroot 1 0 0 12:41 ? 00:00:00 init [2]100 2173 1 0 12:41 ? 00:00:00 /usr/sbin/exim4 -bd -q30mroot 2184 1 0 12:41 ? 00:00:00 /usr/sbin/inetdroot 2206 1 0 12:41 ? 00:00:00 /usr/sbin/sshdstatd 2210 1 0 12:41 ? 00:00:00 /sbin/rpc.statddaemon 2217 1 0 12:41 ? 00:00:00 /usr/sbin/atdroot 2224 1 0 12:41 ? 00:00:00 /usr/sbin/cronroot 2239 1 0 12:41 tty1 00:00:00 /bin/login --root 2242 1 0 12:41 tty2 00:00:00 /sbin/getty 38400 tty2root 2243 1 0 12:41 tty3 00:00:00 /sbin/getty 38400 tty3root 2244 1 0 12:41 tty4 00:00:00 /sbin/getty 38400 tty4root 2245 1 0 12:41 tty5 00:00:00 /sbin/getty 38400 tty5root 2246 1 0 12:41 tty6 00:00:00 /sbin/getty 38400 tty6root 2262 2239 0 12:42 tty1 00:00:00 -bash
![Page 5: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.vdocuments.co/reader036/viewer/2022071807/56812c2b550346895d90a6b3/html5/thumbnails/5.jpg)
Fork() – Introducción
fork()
Proceso en ejecución (PID x)
Proceso Padre (PID x) Proceso Hijo (PID Y / PPID X)
![Page 6: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.vdocuments.co/reader036/viewer/2022071807/56812c2b550346895d90a6b3/html5/thumbnails/6.jpg)
Fork() – ¿Para Qué?Respuesta 1:Que los dos procesos sean iguales no quiere decir que tengan que seguir haciendo lo mismo.
fork()
Proceso en ejecución (PID x)
Proceso en ejecución (PID x). ahora padre de Y
Proceso en ejecución (PID Y).
Hijo de X
Leer_de_teclado()
Escribir_en_archivo()
![Page 7: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.vdocuments.co/reader036/viewer/2022071807/56812c2b550346895d90a6b3/html5/thumbnails/7.jpg)
Fork() – ¿Para Qué?Respuesta 1:Que los dos procesos sean iguales no quiere decir que tengan que seguir haciendo lo mismo.
int main() { int pid = 0, status = 0;
pid = fork()
if (pid == 0) { /* SOLO Proceso Hijo */ printf(``El PID de mi proceso padre es %d\n'', getppid()); exit(1); } else { /* SOLO Proceso Padre */ printf(``Mi PID es el %d y el de mi hijo es %d\n'', getpid(), pid); exit(0); }}
![Page 8: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.vdocuments.co/reader036/viewer/2022071807/56812c2b550346895d90a6b3/html5/thumbnails/8.jpg)
Fork() – Notas
- El proceso hijo comparte el entorno con el proceso padre. (Descriptores abiertos)
-El proceso padre debe esperar la muerte del proceso hijo para que este no sea un zombie. funcion wait()
- Todo proceso puede a su vez ser padre
- Al morir un hijo se recibe la señal SIGCHLD
- Al morir un padre deben morir sus hijos
![Page 9: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.vdocuments.co/reader036/viewer/2022071807/56812c2b550346895d90a6b3/html5/thumbnails/9.jpg)
Fork() – Exec*()La familia de funciones exec() reemplaza la imagen de proceso actual con la imagen de un proceso nuevo.
fork()
Proceso en ejecución (PID x)
if (pid == 0) { // hijo execv(“/bin/ls”, NULL); // nunca se ejecuta exit(0); } else {
// padre wait (pid); exit(0); }