Sunteți pe pagina 1din 5

PRCTICA 5: ANLISIS DEL MAPA DE MEMORIA DE LOS PROCESOS

Programe un ejemplo que cree un proceso hijo mediante fork. El programa debera imprimir el mapa
antes de la creacin. Una vez creado el hijo, ambos procesos deben imprimir su mapa.
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
Void mostrarmapa3(int pid, char cadena[109])
{
Char c;
Int cont=19;
Int var;
For(cont=19;cont>=10;cont=cont-1)
{
Var=pid%10;
C=convertir(var);
Cadena(cont)=c;
Pid=pid/10;
}
System(cadena);
}
int main()
{
Int pid1,pid2,pid3;
pid1=getpid();
pid_t hijo;
char cadena[19]={g,j,,,u,f,k,, ,,a,,,t,u,m,o};
printf("\nAntes de la creacion del hijo\n");
mostrarmapa3(pid1,cadena)
if((hijo = fork()) == -1)
{
perror("fork");
exit(EXIT_FAILURE);
}
else if(hijo == 0)
{
puts("En proceso hijo:");
mostrarmapa3(pid2,cadena);
sleep(1);
exit(EXIT_SUCCESS);
}
else
{
puts("En proceso padre:");
printf(\tpid=%d\n,getpid());
printf(\tppid=%d\n,getppid());
pid3=getpid();
mostrarmapa3(pid3,cadena);
sleep(1);

}
exit(EXIT_SUCCESS);
}
Antes de la creacion del hijo
08048000-08049000 r-xp 00000000 07:01 1058250 /home/dashe/ejer3
08049000-0804a000 r- -p 00000000 07:01 1058250 /home/dashe/ejer3
0804a000-0804b000 rw-p 00001000 07:01 1058250 /home/dashe/ejer3
b7537000-b7538000 rw-p 00000000 00:00 0
b7538000-b76db000 r-xp 00000000 07:01 266514 /lib/i686-linux-gnu/libc-2.9.so
b76db000-b76dd000 r-xp 001a3000 07:01 266514 /lib/i686-linux-gnu/libc-2.9.so
b76dd000-b76de000 r-xp 001a3000 07:01 266514 /lib/i686-linux-gnu/libc-2.9.so
b76de000-b76e1000 rw-p 00000000 00:00 0
b76f1000-b76f3000 rw-p 00000000 00:00 0
b76fe000-b76f4000 r-xp 00000000 00:00 0 [vdso]
b76f4000-b7714000 r-xp 00000000 07:01 286406 /lib/i686-linux-gnu/ld-2.9.so
b7714000-b7715000 r--p 00000000 07:01 286406 /lib/i686-linux-gnu/ld-2.9.so
b7715000-b7716000 rw-p 00000000 07:01 286406 /lib/i686-linux-gnu/ld-2.9.so
bff9b000-bffbc000 rw-p 00000000 00:00 0 [stack]
En proceso hijo:
08048000-08049000 r-xp 00000000 07:01 1058250 /home/dashe/ejer3
08049000-0804a000 r- -p 00000000 07:01 1058250 /home/dashe/ejer3
0804a000-0804b000 rw-p 00001000 07:01 1058250 /home/dashe/ejer3
b7537000-b7538000 rw-p 00000000 00:00 0
b7538000-b76db000 r-xp 00000000 07:01 266514 /lib/i686-linux-gnu/libc-2.9.so
b76db000-b76dd000 r-xp 001a3000 07:01 266514 /lib/i686-linux-gnu/libc-2.9.so
b76dd000-b76de000 r-xp 001a3000 07:01 266514 /lib/i686-linux-gnu/libc-2.9.so
b76de000-b76e1000 rw-p 00000000 00:00 0
b76f0000-b76f3000 rw-p 00000000 00:00 0
b76fe000-b76f4000 r-xp 00000000 00:00 0 [vdso]
b76f4000-b7714000 r-xp 00000000 07:01 286406 /lib/i686-linux-gnu/ld-2.9.so
b7714000-b7715000 r--p 00000000 07:01 286406 /lib/i686-linux-gnu/ld-2.9.so
b7715000-b7716000 rw-p 00000000 07:01 286406 /lib/i686-linux-gnu/ld-2.9.so
bff9b000-bffbc000 rw-p 00000000 00:00 0 [stack]
En proceso padre:
08048000-08049000 r-xp 00000000 07:01 1058250 /home/dashe/ejer3
08049000-0804a000 r- -p 00000000 07:01 1058250 /home/dashe/ejer3
0804a000-0804b000 rw-p 00001000 07:01 1058250 /home/dashe/ejer3
b7537000-b7538000 rw-p 00000000 00:00 0
b7538000-b76db000 r-xp 00000000 07:01 266514 /lib/i686-linux-gnu/libc-2.9.so
b76db000-b76dd000 r-xp 001a3000 07:01 266514 /lib/i686-linux-gnu/libc-2.9.so

b76dd000-b76de000 r-xp 001a3000 07:01 266514 /lib/i686-linux-gnu/libc-2.9.so


b76de000-b76e1000 rw-p 00000000 00:00 0
b76f0000-b76f1000 rw-p 00000000 00:00 0
b76f1000-b76f3000 rw-p 00000000 00:00 0
b76fe000-b76f4000 r-xp 00000000 00:00 0 [vdso]
b76f4000-b7714000 r-xp 00000000 07:01 286406 /lib/i686-linux-gnu/ld-2.9.so
b7714000-b7715000 r--p 00000000 07:01 286406 /lib/i686-linux-gnu/ld-2.9.so
b7715000-b7716000 rw-p 00000000 07:01 286406 /lib/i686-linux-gnu/ld-2.9.so
bff9b000-bffbc000 rw-p 00000000 00:00 0 [stack]
pid=3536
ppid=2906

Desarrolle un programa que cree un proceso hijo usando fork, tal que el hijo ejecute otro programa
mediante exec. El hijo debe escribir su mapa antes del exec y despus del mismo. Para realizar
fcilmente esta ultima impresin, se recomienda que el programa que se va a ejecutar mediante exec
sea directamente el mandato cat sobre el archivo maps correspondiente.
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{
pid_t hijo;
char cadena[100];
char *args[ ] = {"/home/dashe/Documents/prog", NULL};
char *cadena2 = "/home/dashe/Documents/prog";
if((hijo = fork()) == -1)
{
perror("fork");
exit(EXIT_FAILURE);
}
else if(hijo == 0)
{
sleep(4);
puts("En proceso hijo:\n");
system(cadena);
system("chmod 755 prog");
execv( cadena2,args);
exit(EXIT_SUCCESS);
}
else
{
puts("\nEn proceso padre:\n");
printf(En el proceso padre);
printf(\tpid=%d\n,getpid());
printf(\tpid=%d\n,getpid());
}
exit(EXIT_SUCCESS);
}
MAPA DEL PROCESO
08048000-08049000 r-xp 00000000 07:01 1058322 /home/dashe/ejer4
08049000-0804a000 rp 00000000 07:01 1058322 /home/dashe/ejer4
0804a000-0804b000 rw-p 00001000 07:01 1058322 /home/dashe/ejer4
B753f000-b7541000 rw-p 00000000 00:00 0
B7541000-b76e4000 r-xp 00000000 07:01 266514 /lib.i686-linux-gnu/libc-2.9.so
B76e4000-b76e6000 r--p 00000000 07:01 266514 /lib.i686-linux-gnu/libc-2.9.so
B76e6000-b76e7000 rw-p 00000000 07:01 266514 /lib.i686-linux-gnu/libc-2.9.so
B76e7000-b76ea000 rw-p 00000000 00:00 0
B76ea000-b7701000 r-xp 00000000 07:01 286403 /lib.i686-linux-gnu/libpthread-2.9.so
B7701000-b7702000 r--p 00016000 07:01 286403 /lib.i686-linux-gnu/libpthread-2.9.so

B7702000-b7703000 rw-p 00017000 07:01 286403 /lib.i686-linux-gnu/libpthreas-2.9.so


B7703000-b7705000 rw-p 00000000 00:00 0
B7715000-b7717000 rw-p 00000000 00:00 0
B7717000-b7718000 r-xp 00000000 00:00 0 [vdso]
B7718000-b7738000 r-xp 00000000 07:01 286406 /lib/i686-linux-gnu/ld-2.9.so
B7738000-b7739000 r--p 00000000 07:01 286406 /lib/i686-linux-gnu/ld-2.9.so
B7739000-b773a000 rw-p 00000000 07:01 286406 /lib/i686-linux-gnu/ld-2.9.so
Bfe0d000-bfe2e000 rw-p 00000000 00:00 0 [stack]
En proceso hijo:
08048000-08049000 r-xp 00000000 07:01 1058322 /home/dashe/ejer4
08049000-0804a000 rp 00000000 07:01 1058322 /home/dashe/ejer4
0804a000-0804b000 rw-p 00001000 07:01 1058322 /home/dashe/ejer4
B753f000-b7541000 rw-p 00000000 00:00 0
B7541000-b76e4000 r-xp 00000000 07:01 266514 /lib.i686-linux-gnu/libc-2.9.so
B76e4000-b76e6000 r--p 00000000 07:01 266514 /lib.i686-linux-gnu/libc-2.9.so
B76e6000-b76e7000 rw-p 00000000 07:01 266514 /lib.i686-linux-gnu/libc-2.9.so
B76e7000-b76ea000 rw-p 00000000 00:00 0
B76ea000-b7701000 r-xp 00000000 07:01 286403 /lib.i686-linux-gnu/libpthread-2.9.so
B7701000-b7702000 r--p 00016000 07:01 286403 /lib.i686-linux-gnu/libpthread-2.9.so
B7702000-b7703000 rw-p 00017000 07:01 286403 /lib.i686-linux-gnu/libpthreas-2.9.so
B7703000-b7705000 rw-p 00000000 00:00 0
B7715000-b7717000 rw-p 00000000 00:00 0
B7717000-b7718000 r-xp 00000000 00:00 0 [vdso]
B7718000-b7738000 r-xp 00000000 07:01 286406 /lib/i686-linux-gnu/ld-2.9.so
B7738000-b7739000 r--p 00000000 07:01 286406 /lib/i686-linux-gnu/ld-2.9.so
B7739000-b773a000 rw-p 00000000 07:01 286406 /lib/i686-linux-gnu/ld-2.9.so
Bfe0d000-bfe2e000 rw-p 00000000 00:00 0 [stack]
En proceso padre:
Pid=3464
Ppid=2464

S-ar putea să vă placă și