Informática
Unix
Cada vez que se comienza un trabajo, se dice que ha comenzado un proceso, que morirá en el momento en que el trabajo termine.
Se puede definir proceso como una unidad de ejecución desencadenada como consecuencia de la ejecución de una orden, un programa, o un módulo de programa.
Por tanto podemos decir que un proceso es una entidad activa y un programa es una entidad pasiva.
Gracias a los procesos Unix puede trabajar en multiprogramación. Por ejemplo la orden: cat /etc/passwd, genera un proceso que subsiste, hasta que la orden se completa. Sin embargo, la orden: cat /etc/passwd | more genera dos procesos o unidades de ejecución, uno por cada orden.
El procesamiento en Unix tiene lugar en tiempo compartido (distribución de la asignación de procesador entre los diferentes procesos que compiten por ejecutarse). Generalmente, los sistemas Unix solo tienen una CPU que ejecuta los programas, y por tanto, solo un programa podrá estar ejecutándose en un momento determinado.
Una función muy importante del núcleo es proporcionar control y soporte a los muchos programas (los del sistema y los proporcionados por los usuarios) que pudieran desear utilizar la CPU en un momento dado. Es decir, existe una distribución temporal de la asignación de CPU entre los diferentes procesos que compiten por ejecutarse.
Así, solo se puede considerar un proceso cuando la orden que lo genera está en ejecución real o en espera de acceso a la CPU.
Control de prioridad de procesos.
Supuesto un ordenador con un solo procesador, el sistema Unix realiza una distribución temporal de la asignación de CPU entre los diferentes procesos que compiten por ejecutarse (Tiempo Compartido) en dicho procesador.
Esta función la realiza el planificador de procesos (proceso 0 ó Scheduler), que además, como veremos más adelante, es el primer proceso que se ejecuta al arrancar el sistema.
Esta planificación de CPU de conmutación temporal de procesos, está basada en un sistema de colas FIFO, multinivel con actualización de prioridad.
Gráficamente podríamos representarlo :
PROCESOS | COLAS DE PROCESOS | NUM. COLA | PRIORIDAD |
Colas de procesos de | 20 | Mínima | |
USUARIO | |||
. . . . . . .F.I.F.O. . . . . . . . | |||
Colas de procesos del | |||
SISTEMA (NUCLEO) | |||
0 | Máxima |
-
Cuanto más alto sea el número de cola de un proceso menor prioridad tiene ese proceso.
-
Los procesos lanzados por los usuarios tienen menos prioridad, su número de cola por defecto es de 10. Pero es posible modificar la prioridad de los procesos externamente (comando nice).
-
El superusuario puede aumentar la prioridad de los procesos a costa de los demás procesos del sistema que permanecen en cola. Pero, los usuarios solo pueden decrementar la prioridad de los procesos que les pertenecen.
Procesos del sistema.
A continuación vamos a estudiar la planificación de los principales procesos del sistema Unix. La planificación más estándar es la siguiente:
Nº de proceso | Nombre | Función |
0 | scheduler ó sched | Planifica el procesador |
1 | init | Inicializador del sistema |
2 | vhand | Gestor de memoria virtual o swap |
3 y 4 (en Linux 6) | bdflush y bmapflush | Gestor de E/S de disco |
En Unix existen dos tipos de procesos:
Procesos del sistema. Son los procesos que actúan sin que el usuario los solicite. También reciben el nombre de demonios (daemon). A su vez, pueden ser de dos tipos:
Procesos permanentes o de larga duración. Se crean cuando se arranca el sistema y permanecen activos hasta que se desconecta. Su función es soportar las actividades del sistema.
Procesos transitorios. Nacen y mueren cuando el sistema efectúa tareas propias, independientes de los usuarios.
Procesos de usuario. Son los procesos asociados a cada usuario como consecuencia de la interpretación de sus órdenes.
Planificador (proceso 0: scheduler): Es el primer proceso en ejecutarse cuando se arranca la máquina. Se encarga de planificar las capacidades de tiempo compartido. Es el responsable de determinar cual de los procesos que están en cola, listos para ser ejecutados, obtienen realmente los recursos de la máquina. También arranca los demás procesos 1 al 6.
Inicializador (proceso 1: init): Se encarga de arrancar y mantener en ejecución los procesos permanentes del sistema, de acuerdo con el contenido del fichero /etc/inittab.
Gestor de memoria virtual (proceso 2: vhand): Se encarga de realizar la mayor parte del trabajo administrativo del sistema referente a la gestión de la memoria en el entorno multitarea. Es el responsable de gestionar la memoria virtual de la máquina e intercambia procesos activos entre el disco y la memoria principal conforme deban ser ejecutados o aparcados temporalmente. Sched y vhand trabajan en estrecha relación y componen la parte fundamental del núcleo de Unix (kernel).
Gestores de E/S de disco (procesos 3 y 4: bdflush y bmapflush): Se encargan de gestionar los numerosos buffers (memorias intermedias) de datos en Memoria principal que aumentan la eficacia de las operaciones de E/S con disco, y que funcionan de manera similar a como lo hace un disco de RAM en otros sistemas.
Para evitar pérdidas de información ante un eventual fallo en el sistema, bdflush y bmapflush escriben periódicamente todos los buffers generando una operación sync, que escribe cada vez aquellos datos que han sido modificados. La frecuencia de esta operación es un parámetro dependiente del sistema, un valor típico es de 20 segundos.
Existen además otros demonios o procesos del sistema cuya creación y mantenimiento dependen de init. Veamos a continuación algunos de ellos:
Programa de inicialización del sistema ( login): Este programa permite solamente lanzar un shell asociado a una cuenta o usuario. Linux lanza el shell bash (uno por cada usuario).
Programa gestionador de la línea de terminales (getty): Se encuentra situado en el subdirectorio /etc y, como se ha indicado, se encarga de gestionar las líneas de los terminales.
El proceso init está continuamente enviando getty a cada uno de los terminales. En cuanto en un terminal se conecta un usuario (introduciendo su nombre y su password) se pone en marcha el proceso login.
Programa planificador del sistema de impresión (lpsched): Se encarga de gestionar el spool de impresión, es decir, del subsistema de impresión, lp.
El proceso del sistema (crond): Este proceso es el mecanismo de planificación global o externa del sistema, que actúa, por ejemplo, sobre las órdenes at y batch. Estas órdenes permiten la temporización y planificación de la ejecución de trabajos.
El demonio crond se despierta una vez cada minuto, examina los ficheros de control, que se encuentran en /etc/crontab según unos sistemas o /etc/spool/cron/crontabs, según otros. En estos ficheros se almacenan los trabajos planificados mediante crontab, si encuentra algún trabajo que deba ser ejecutado en ese minuto los ejecuta y si no los hay, vuelve a dormir hasta el siguiente minuto.
Existe un fichero histórico de todos los trabajos ejecutados mediante crond, es el fichero : /usr/adm/cronlog o en otros sistemas /usr/lib/cron/log . Esto sucede a partir de la versión 3.0 de Linux.
Hay que usar el comando crontab para instalar una lista de comandos que se ejecutarán según una planificación regular. La lista de comandos a efectuar en la planificación indicada se ha de incluir en el archivo crontab, que se instala con el comando crontab. Una vez se ha instalado el archivo crontab, mediante el mismo comando, se puede ver la lista de comandos incluidos en el archivo y cancelarla si se quiere.
Antes de instalar el archivo crontab con el comando del mismo nombre, hay que crear un archivo que contenga la lista de comandos que se quiere planificar. El comando se ocupa de su colocación. Cada usuario tiene sólo un archivo crontab guardado en el directorio /usr/spool/cron/crontabs.
A este archivo se le asigna el nombre del usuario. Si el nombre de usuario es usua y se crea un fichero llamado micron y se instala escribiendo crontab micron, se creará el archivo var/spool/cron/crontabs /usua, con el contenido de micron.
Procesos subordinados.
Los procesos describen el estado actual de la máquina. Un proceso es creado desde otro proceso, al cual llamaremos proceso padre.
Las órdenes de usuario son procesos subordinados o hijos del proceso shell (bash) correspondiente a ese usuario. Es decir, los procesos lanzados desde un shell dado, son todos procesos subordinados de dicho shell. Al terminar un proceso shell, se terminan automáticamente todos sus procesos.
Cuando se mata un proceso padre normalmente mueren los procesos hijos, aunque pueden seguir activos tomando como nuevo proceso padre el proceso init.
Se podría representar mediante el siguiente diagrama de procesos:
Antes que nada, veamos un ejemplo de los procesos activos que podría haber en un ordenador con sistema Unix, en un momento dado (para obtener este listado hemos utilizado el comando ps que veremos con detalle más adelante). Además, conviene saber que:
PID: Es el número identificador del proceso.
PPID: Es el número identificador del proceso padre.
$ ps -elaf
UID | PID | PPID | C | STIME | TTY | TIME | COMMAND | |
root | 0 | 0 | 0 | 11:22:04 | ¿ | 0:00 | sched | planificador |
root | 1 | 0 | 0 | 11:22:04 | ¿ | 0:06 | /etc/init | init |
root | 2 | 0 | 0 | 11:22:04 | ¿ | 0:00 | vhand | Gestor mem. virtual |
root | 3 | 0 | 0 | 11:22:04 | ¿ | 0:01 | bdflush | Vaciado de buffer a disco |
root | 259 | 1 | 0 | 09:54:35 | 01 | 0:02 | -sh | shell de root |
A101 | 260 | 1 | 2 | 09:54:35 | 02 | 0:01 | -sh | shell de ord101 |
root | 232 | 1 | 0 | 09:54:31 | ¿ | 0:00 | /etc/cron | demonio cron |
root | 238 | 1 | 1 | 09:54:32 | ¿ | 0:02 | /usr/lib/lpshed | demonio lp |
root | 260 | 1 | 0 | 09:54:37 | 03 | 0:00 | /etc/getty | tty03 m |
root | 262 | 1 | 0 | 09:54:37 | 04 | 0:00 | /etc/getty | tty04 m |
root | 262 | 1 | 0 | 09:54:37 | 05 | 0:00 | /etc/getty | tty05 m |
root | 275 | 1 | 0 | 09:54:37 | i00 | 0:00 | /etc/getty | ttyi00 m |
root | 276 | 1 | 0 | 09:54:37 | i01 | 0:00 | /etc/getty | ttyi01 m |
root | 277 | 1 | 0 | 09:54:37 | i02 | 0:00 | /etc/getty | ttyi02 m |
A101 | 526 | 260 | 11 | 09:54:38 | 2 | 0:00 | ps -elaf | comando |
A101 | 527 | 526 | 5 | 09:55:38 | 02 | 0:00 | ls | comando |
Los procesos tienen una estructura jerárquica en árbol, como los directorios, veamos un esquema:
Obsérvese que:
-
Un proceso en marcha genera procesos hijos, cada uno de los cuales se encarga de gestionar distintos aspectos del sistema, y que a su vez, generan otros procesos hijos, hasta llegar a los generados por los usuarios.
-
El proceso sched es padre de init pero también lo es de vhand, bdflush.
-
A su vez init crea y mantiene los procesos permanentes del sistema : bash, cron, gettys y lpsched.
-
Las órdenes de usuario son procesos subordinados o hijos del proceso shell, correspondiente a ese usuario.
Ahora veamos como crea las órdenes de usuario Unix, convirtiéndolas en procesos. El mecanismo de creación de una orden es el siguiente:
-
Unix utiliza un mecanismo de creación por copia.
-
El proceso hijo es una réplica exacta de su padre.
-
El proceso hijo hereda la mayoría de atributos de su proceso padre.
-
Unix asigna un identificador a cada proceso, denominado PID, en el momento de creación del mismo.
-
Todo proceso conoce el identificador de su padre, PPID.
-
La ejecución del hijo es concurrente e independiente.
Hay dos formas de crear procesos en el shell:
Primer plano. Espera a que termine para mostrar el prompt.
Segundo plano. También conocido como background. El mandato se ejecuta seguido del símbolo &. El shell no espera a que el proceso creado finalice, el usuario puede ejecutar otro mandato de forma inmediata. El shell notifica el PID asignado a ese proceso. También notifica al usuario cuando ha terminado de ejecutar el mandato en 2º plano.
Un proceso Unix dispone de una entrada estándar (0 asociada al teclado) y dos salidas estándar a la pantalla: una normal (1), y otra de errores (2). Estas salidas y entradas son heredadas por los procesos.
Diagnóstico de problemas con procesos y solución.
Conviene conocer aproximadamente cuales son los procesos que habitualmente se ejecutan y las características que tienen, estos varían entre las diferentes versiones de Unix (por instalación , por configuración, por opciones del sistema, etc)
Para conocer estos procesos conviene ejecutar con frecuencia la orden ps, esto permite detectar si algún proceso no se ejecuta o se ejecuta incorrectamente.
La mayor parte de los problemas están relacionados con la ejecución de una orden o aplicación concreta y frecuentemente se trata de :
-
Falta de ficheros o directorios, porque se han borrado o deteriorado.
-
Permisos inadecuados en ficheros o directorios.
Las claves para detectar los problemas relacionados con procesos son las siguientes:
-
Una modificación notable en el tiempo de respuesta, y por tanto, una baja en el rendimiento del sistema.
-
Terminación prematura de procesos sin causa aparente.
-
Actividad inusual del disco sin causa aparente.
Unix dispone de herramientas para eliminar o matar procesos largos o que no se ejecutan correctamente (comando kill).
Si elimina un proceso, conviene recordar que, se eliminan al mismo tiempo todos sus procesos hijos o subordinados activos. Por ejemplo al eliminar un shell, se eliminan todos los procesos lanzados por él.
En Linux a veces esto no sucede, deberemos asegurarnos de que los procesos hijos se han eliminado y si no lo tendremos que hacer nosotros.
El superusuario puede eliminar cualquier proceso del sistema o de usuario, excepto los procesos 0,1,2,3 y 4.
Los usuarios solo pueden matar los procesos propios o los de aquellos usuarios no protegidos. En Linux, es posible que esta protección no esté activa y por tanto deberá ser el superusuario el que tome precauciones, ya que la eliminación de alguno de estos procesos puede dañar el sistema.
Fin de la sesión de trabajo, con procesos en marcha.
Normalmente, los subordinados de un proceso finalizan cuando el superior muere o finaliza. Esto significa que un proceso, iniciado en segundo plano finaliza cuando se desconecta del sistema. Bien por salida natural, exit o ^D, bien porque ha sido matado.
Linux proporciona una herramienta para permitir que los procesos subordinados a un shell de usuario, continúen, ejecutándose después de la despedida de la sesión de usuario. Esta herramienta es el comando nohup.
Esta posibilidad es muy útil para trabajos que necesiten ejecutarse durante un largo periodo de tiempo, durante toda una noche e incluso durante días y semanas.
La despedida del shell mientras procesos subordinados están en marcha permite la protección del proceso, ante fallos en el sistema, o ante investigaciones en el shell de un usuario que perturbe la confidencialidad de la información almacenada en su entorno de trabajo.
A nivel interno, esta herramienta funciona porque el proceso subordinado que se desea continúe, cuando la sesión de usuario ha finalizado, toma como padre o líder el proceso init (PID 1) y no el proceso bash correspondiente a ese usuario.
Comandos
ps
Esta orden, muestra la información de los procesos. Este informe es solamente como una instantánea de lo que está pasando cuando ha preguntado. Una invocación subsecuente puede dar resultados distintos.
Sintaxis:
ps [ opciones]
Opciones:
Sin opciones, muestra una imagen del proceso que se está ejecutando actualmente en su terminal.
-'-l' Proporciona un listado largo.
-'-u' Imprime en formato de usuario, el nombre de usuario y la hora de inicio.
-'-j' Produce la salida en el formato del trabajo.
-'-s' Produce la salida en formato de señal.
-'-m' Muestra información de memoria.
-'-a' Muestra también los procesos de otros usuarios.
-'-x' Muestra todos los procesos, incluidos demonios.
-'-c' Lista el nombre del comando desde la estructura de tareas del kernel.
-'-e' Muestra el entorno.
-'-w' Visualiza en formato ancho.
-'-h' No muestra una cabecera.
-'-r' Sólo muestra los procesos en ejecución.
-'-n' Proporciona salida numérica para USER y WCHAN
-'-txx' Sólo muestra procesos con los controles tty xx
El informe muestra información en columnas estas son:
PID El número identificador de proceso.
PPID El número identificador del proceso padre.
PRI Prioridad de proceso.
NI El valor del nice del proceso. Un valor positivo significa menos tiempo de CPU.
SIZE El tamaño virtual de la imagen, calculado como el tamaño de texto+pila+datos.
RSS El tamaño del conjunto residente. El número de Kilobytes del programa que está residente en la memoria actualmente.
WCHAN El número del evento del kernel por el que está esperando el proceso.
STAT El estado del proceso. Dado por uno de los códigos siguientes:
R Ejecutable
S Dormido
D Dormido ininterrumpible.
T Parado o rastreado.
Z Zombie. Es un proceso terminado, y el superior no lo ha asumido.
W El proceso no tiene páginas residentes.
TT El nombre del tty de control para el proceso.
PAGEIN El número de fallos de página que han causado que las páginas se lean desde el disco.
TRS El tamaño de texto residente.
SWAP El número de Kilobytes de un espacio intercambiable.
Ejemplo:
ps -uaxl Muestra la información más completa. Si observamos los valores PID y PPID se podrá seguir la secuencia de creación de procesos hijos por parte de sus líderes.
kill
Esta orden envía una señal a un proceso que se está ejecutando actualmente. Normalmente se utiliza este comando para detener el proceso de ejecución.
Sintaxis :
kill [-señal] PID ó kill -l
Opciones:
-'-l' Muestra una lista de los nombres de señal que pueden ser utilizados con kill.
1 Provoca que el terminal queda colgado. Al salir del sistema los procesos entran en modo desatendido o background (nos permite cortar un proceso de shell, salir al login) (SIGHUP similar a colgar el teléfono)
2 Interrupción similar a Ctrl-c
3 Salir y generar un archivo de volcado core
9 Kill o muerte segura. No puede ser ignarada (SIGKILL)
15 Finalización del proceso. Es similar al 9 pero puede ser ignorada. Predeterminada (SIGTERM)
El PID es el identificador del proceso al que quiere enviar la señal especificada. Un pid es un número utilizado por el sistema para hacer un seguimiento del proceso. Para averiguar esto, como antes se ha explicado, se utiliza el comando ps.
crontab
El comando crontab informa al proceso daemon crond de los programas y de la planificación según la que deberían ejecutarse.
Sintaxis :
crontab [-opciones] [-u usuario]
Opciones :
-'-l' Lista el archivo crontab.
-'-e' Edita el archivo crontab. Utiliza el editor vi o el especificado por su variable de entorno VISUAL.
-'-r' Suprime el archivo crontab del usuario.
-'-u usuario' Especifica un archivo crontab determinado del usuario que se va a manipular. Tiene que ser root para utilizar esta función.
El archivo crontab tiene el formato : M H D m d comando. Se ignoran las líneas en blanco y aquellas que comienzan por #. Un * en un campo selecciona todos los valores posibles de ese campo. Además, el archivo crontab puede especificar como campos del comando rangos .
Formato :
M Los minutos de la hora. (0-59)
H La hora del día. (0-23)
D El día del mes. (1-31)
m El mes del año. (1-12)
d El día de la semana. (0-6, 0=domingo)
comando El programa a ejecutar. Esta línea de comandos se pasa a sh. El shell se ejecuta con sólo tres variables de entorno: USER, HOME, SHELL.
Cada línea del archivo crontab contiene un patrón de tiempo y un comando; según aquel se ejecuta este. El patrón se divide en cinco campos separados por espacios o tabuladores. Cualquier salida que no aparezca en la estándar se dirige al usuario, mediante el correo.
Para que un usuario pueda usar el comando crontab, ha de estar listado en el archivo /etc/cron.d/cron.allow (A partir de la versión 3.0). El superusuario debe añadir el nombre del usuario que se desea habilitar para usar este comando. Una vez creado el archivo crontab, hay que modificarlo a través del comando crontab. No se debe modificar por ningún otro medio.
Se pueden disponer de tantas entradas como se quieran en un archivo crontab y señalarlas para que se ejecuten en cualquier momento.
Una vez creado el archivo de crontab para poder añadir entradas, para corregirlas o para eliminarlas tendremos que editar el fichero de crontab y modificarlo según nuestras necesidades.
Ejemplo:
30 07 * * 01 sort fichero_ventas | mail “ventas semanales” usuario
Se va a clasificar el fichero de ventas y el resultado se va a enviar mediante un mail a un usuario concreto, la clasificación se va producir el minuto 30 de la hora 7 de cualquier día del mes y cualquier año, un lunes.
*/2 * * * * echo Hola han pasado dos minutos.
Aparecerá el mensaje cada dos minutos.
10-20/2 * * * * echo Hola entre los minutos 10 y 20 aparezco cada dos minutos
El mensaje aparecerá entre los minutos 10 al 20 de cada hora y con un intervalo de dos minutos.
10,15 * * * * echo Hola es el minuto 10 ó 15
El mensaje aparece los minutos 10 y 15 de cada hora
Todas estas combinaciones se pueden hacer con el resto de apartados.
at
El comando at planifica trabajos para que se ejecuten posteriormente, en un momento dado.
El superusuario tiene un fichero crontab en el cual una de sus entradas puede ser parecida a la siguiente:
* * * * /usr/lib/atrun 1> /dev/null 2> /dev/null
lo cual significa que cada minuto se debe ejecutar atrun que es el encargado de que se ejecute el comando at.
Sintaxis:
at [-opciones] fecha-hora
El comando at devuelve un identificador de trabajo cuando se le invoca. Este identificador puede ser utilizado luego como el parámetro id-trabajos.
Opciones:
-'-q cola' Se puede especificar un nombre de cola opcional, cola puede ser cualquier letra entre la a y z, y entre la A y Z. La cola c la predeterminada para at y la cola E lo es para batch. En tiempo de CPU, las colas con letras más altas (más cercanas al final del alfabeto) se ejecutan con prioridad más baja. Si se envía un trabajo a una cola nombrada con una letra mayúscula, se trata como si la hubiera enviado batch.
Fecha-hora Es la hora en que empieza el trabajo. El formato es altamente flexible y se divide en tres partes básicas : hora, fecha e incremento. Se acepta la hora en formato HHMM o HH:MM. También se puede especificar el sufijo AM o PM y el día en que se va a ejecutar el comando dándole la fecha con el formato MMDDAA o MM/DD/AA o MM.DD.AA. También se puede indicar a at que ejecute el trabajo hoy o mañana, poniendo today o tomorrow.
-'-l' Lista los trabajos actualmente planificados. Si es superusuario, se listan todos los trabajos.
-'-m' Envía correo al usuario cuando el trabajo se ha completado, incluso si no hay ninguna salida.
-'-d idtrab' Elimina de la cola los identificadores de trabajo. Solo se pueden eliminar los propios trabajos, a no ser que sea el superusuario.
-'-f archivo' Lee el trabajo desde el fichero especificado en lugar de la entrada estándar.
-'-V' Visualiza la versión del at
-'-v' Se utiliza con la opcion `-l' y visualiza los trabajos que se han realizado pero no borrado.
Otros formatos
atq: Lista los trabajos pendientes del usuario, (at -l). Permite utilizar la opción `-v'
atq
atq -v
atrm: Borra un trabajo. (at -d nºtrabajo)
atrm nºtrabajo
Directorios
/etc
El superusuario puede utilizar este comando en cualquier momento. Para los otros usuarios, el permiso para utilizar at lo determinan los archivos /etc/at.allow y /etc/at.deny.
Si no existe at.allow y existe at.deny, pero éste está vacío, todos los usuarios podrán utilizarlo.
Si no existe ninguno no podrá utilizarlo ningún usuario, (sí, el superusuario)
Si existe el fichero at.allow debe contener el nombre de los usuarios que pueden utilizar el comando (uno por línea). Da lo mismo que exista o no el at.deny.
Si no existe at.allow, entonces los nombres que se introduzcan en at.deny serán los usuarios que no puedan utilizar el comando, todos los demás podrán utilizarlo.
/var/spool/atjobs
En este directorio va creando unos ficheros con nombre de 14 caracteres, que son los trabajos que vamos mandando.
Los ficheros los crea ejecutables y una vez que se han ejecutado les quita el permiso de ejecución.
De estos 14 caracteres que forma el nombre del fichero el significado de los 6 primeros caracteres es el siguiente: (empezando por la izquierda)
1º Es el nivel, la prioridad que le demos con la opción `-q'.
2º al 6º Es el número de trabajo en hexadecimal.
La salida estándar y los errores estándar de los comandos ejecutados se envían por correo al usuario por medio del mail de Unix.
Ejemplos:
at 10:00am tomorrow <fichero> De esta forma los comandos no son introducidos a continuación sino que se extraen del fichero especificado.
at -f fichero 11am Aug 15 Ejecuta los comandos encontrados en el fichero especificado el 15 de Agosto a las 11:00 AM.
batch
El comando batch planifica trabajos para que se ejecuten posteriormente, a diferencia de at es el sistema quien decide cuando ejecuta el comando. El comando batch deja que sea el sistema operativo el que decida el momento adecuado para ejecutar el proceso. Cuando se planifica una tarea con batch, Linux comienza y trabaja en el proceso siempre que la carga no sea demasiada alta. Las tareas que se ejecutan con batch se hacen en segundo plano, como at.
Sintaxis:
batch <intro>
lista de comandos
^D
Se puede almacenar la lista de comandos en un archivo y redirigir la entrada a batch para que provenga del archivo.
Ejemplo:
batch <intro>
sort /usr/reports |lp
echo “Ficheros impresos “ |mail usuarios
^D
El sistema devuelve la siguiente respuesta :
job 7789001234 at Sat Dec 21 11:43:09 1996
La fecha y hora listadas son las del momento de pulsar ^D para completar el comando batch. Cuando la tarea esté completa se debe consultar el correo porque es ahí donde se dirigen los mensajes.
nice
Sirve para modificar la prioridad de un proceso.
Sintaxis:
nice -número comando
Este comando da un control sobre la prioridad de una tarea respecto a otras. Si no se usa nice los procesos se ejecutan con una prioridad definida. Se puede disminuir (de forma amable como la traducción literal del comando indica ) la prioridad de un proceso con este comando de forma que los otros procesos puedan planificarse para que usen más frecuentemente la CPU. El superusuario también puede aumentar la prioridad de un proceso.
El nivel de prioridad lo determina el argumento número (un número más alto significa una prioridad menor). El valor predeterminado, como se ha mencionado, es 10. Si el argumento número se ha especificado, la prioridad se incrementa en esta cantidad hasta un límite de 20. Si no se especifica nada todos los procesos toman la prioridad 10.
Para ver la prioridad nice de los procesos se usa la opción -l del comando ps. Hay que observar las columnas PRI y NI.
Para dar a un proceso la mínima prioridad se especifica en el argumento número el 10.
Sólo el superusuario puede aumentar la prioridad de un proceso. Para ello se usa un número negativo como argumento de nice. Se recuerda que cuanto más bajo sea el valor de nice más alta será la prioridad.
Ejemplos :
nice -5 lp mis_listados & Baja la prioridad , es decir 10+5 =15 en la cola.
nice -10 Esto da la mínima prioridad posible. El número de cola será 10+10=20
nice - -10 ls -lR / Sólo el superusuario. Da la máxima prioridad 10-10=0
Por último conviene mencionar que en algunos sistemas existe un comando, renice, que permite modificar la prioridad de un proceso que ya se está ejecutando. Los sistemas Unix de Berkeley lo incorporan y también los sistema Linux system V. La sintaxis es similar a la de nice.
nohup
Mantine la ejecución de ordenes aunque se desconecte el sistema.
Sintaxis:
nohup orden1; orden2 ; …ordenN
El efecto que produce es ejecutar una orden aunque finalice su líder, es decir cambia el PPID de ese proceso asignándole el valor 1.
Para la ejecución de nohup deben tenerse en cuenta las siguientes consideraciones:
Si después de la orden no está disponible el prompt del entorno de usuario, no se podrá despedir la sesión. Por ello, es conveniente utilizar la ejecución desatendida en la orden argumento de nohup.
Otra consideración a tener en cuenta es que si no sé redirige la salida de la orden, por defecto, crea un fichero con nombre: nohup.out dónde se almacena el resultado de la orden.
El Linux genera errores que graba en ficheros llamados core, los cuales ocupan mucho espacio. Conviene ver el contenido de estos ficheros y después borrarlos.
Para borrar estos ficheros lo primero es localizarlos. Esto lo haremos con la orden:
find / -name core -print
Este comando buscará todos los ficheros core, y los escribirá en la pantalla. Después iremos a cada directorio donde estén y los borraremos.
2
Proceso Tema 7
Procesos de Unix. Página: 16/16
Instituto de Secundaria SEVERO OCHOA | Página 14 |
PID= 0
sched
PID= 1
PPID= 0
Inicializa sistema
init
PID= 23
PPID= 1
Proceso que hace referencia a un terminal.
login
getty
getty
getty
PID = 45
PPID= 23
bash
Valida conexión
login
PID = 87
PPID= 45
bash
Intérprete de comandos
bash
ls -l
Cuando termine la ejecución el shell
recupera el control.
exit
bash script
ls -l
bash
Proceso Hijo
Proceso Padre
login
init
Procesos del Sistema
init
Descargar
Enviado por: | Puria |
Idioma: | castellano |
País: | México |