Práctica 2: Procesos en UNIX.
Continuar la codificación de un intérprete de comandos (shell) en UNIX, que se irá completando en suscesivas prácticas. Como en la práctica anterior debe tenerse en cuenta que:
En está practica se introducirá la creación de procesos que ejecutan programas (tanto en primer plano como en segundo plano) y la ejecución de programas sin haber creado procesos. Además, en cualquiera de los casos (ejecución en primer plano, ejecución en segundo plano o ejecución sin crear proceso) para que un ejecutable pueda ser ejecutado debe especificarse la trayectoria completa hasta él (comenzando por "/", "./" o "../") o (en caso de no haberse especificado la trayectoria completa hasta él) debe residir en uno de los directorios de la ruta de búsqueda de nuestro intérprete de comandos (análoga a la variable de entorno PATH en los intérpretes de comandos mas usuales: bash, ksh ...) Cada vez que el shell ejecuta un proceso en segundo plano guarda información de dicho proceso en una lista (de procesos en segundo plano lanzados desde nuestro shell). El comando jobs permite ver y manipular dicha lista.
# uid root Imposible cambiar credencial: not owner # uid 15432 Imposible cambiar credencial: not owner # uid insaaa00 Credencial efectiva de usuario establecida insaaa00 (12001) #uid Credencial real de usuario insbbb00 (12007) credencial efectiva de usuario insaaa00 (12001)
Manipula la ruta de búsqueda del intérprete de comandos.
La ruta de búsqueda del intérprete de comandos es el conjunto de directorios donde el shell busca los ejecutables (Su misión es análoga a la variable de entorno PATH en el shell del sistema). NO DEBE implementarse con una variable de entorno.
Los directorios se especificarán sin el caracter '/' al final.
#search -a /usr/local/bin /* correctos */ #search -a / #search -a . ...... #search -a /usr/local/bin/ /*incorrecto*/ #search -a ./ /*incorrecto*/
#search -a /usr/openwin/bin # search -f xterm /usr/openwin/bin/xterm #search -f xternp xternp: no encontrado #search -f ./aa.out ./aa.out: no encontrado #search -f ./a.out ./a.out
Ejemplos
#exec /usr/bin/ls -l /home /*ejecuta /usr/bin/ls*/ .... #exec ./a.out -l /*ejecuta a.out, /*que esta en el directorio actual */ ...... #exec ls -l /* para ejecutar esto, es necesario */ /*que el directorio /usr/bin, */ /*donde esta el programa ls, se haya incluido */ /* a la ruta de busqueda */ #/usr/bin/ls -l /home /*crea un proceso que ejecuta /usr/bin/ls*/ .... #./a.out -l /* crea un proceso que ejecuta a.out,*/ ...... /* que esta en el directorio actual */ #ls -l /* para ejecutar esto, es necesario que el directorio */ /* /usr/bin, donde esta el programa ls, se haya incluido */ /* a la ruta de busqueda */ #xterm -e csh & /*crea un proceso que ejecuta xterm en segundo plano*/ #xterm -e e 10000 @10 & /* crea un proceso que ejecuta xterm en segundo plano*/ /*pasandole como argumentos -e e 1000 */ /*y con la priordad establecida a 10*/
#jobs /*lista todos los procesos*/ #jobs -a /*lista todos los procesos que han terminado*/ #jobs -s /*lista todos los procesos que han terminado debido a una seņal*/ #jobs -d -n /*elimna de la lista los procesos que han termniado normalmente*/ #jobs -d /*lista todos los procesos */
struct rusage { struct timeval ru_utime; /* user time used */ struct timeval ru_stime; /* system time used */ long ru_maxrss; /* maximum resident set size */ long ru_ixrss; /* integral shared memory size */ long ru_idrss; /* integral unshared data size */ long ru_isrss; /* integral unshared stack size */ long ru_minflt; /* page reclaims */ long ru_majflt; /* page faults */ long ru_nswap; /* swaps */ long ru_inblock; /* block input operations */ long ru_oublock; /* block output operations */ long ru_msgsnd; /* messages sent */ long ru_msgrcv; /* messages received */ long ru_nsignals; /* signals received */ long ru_nvcsw; /* voluntary context switches */ long ru_nivcsw; /* involuntary context switches */ };
Información detallada de las llamadas al sistema y las funciones de la librería debe obternerse con man (exec, fork, strtok, wait4, getuid, getpwent, setuid ...)
FORMA DE ENTREGA Va a ser utilizado el servicio de recogida de prácticas suministrado por el Centro de Cálculo de esta Facultad y parte del proceso de corrección de las prácticas va a ser automtico (compilación, listado de practicas entregadas etc) por lo cual deben entregarse exactamente como se indica a continuación:
/* AUTOR:apellido11 apellido12, nombre1:login_en_el_que_se_entrega AUTOR:apellido21 apellido22, nombre2:login_en_el_que_se_entrega */donde:
FECHA DE ENTREGA VIERNES 18 MAYO 2007