Aprenderemos las limitaciones impuestas en la creación de archivos y directorios así como todos los comandos relacionados con la creación, modificación y eliminación de archivos. José María Torres Corral Página 0 de 7 ORGANIZACIÓN DEL ÁRBOL v i e r n e s, 1 5 d e a b r i l d e 2 0 1 1 14:07:12
Tabla de contenido 1... Introducción... 2 2... Árbol de procesos y PID... 2 3... Comandos de visualización de procesos... 2 3.1... ps... 2 3.2... top... 3 3.3... pstree... 4 3.4... kill... 5 3.5... killall... 5 3.6... jobs... 6 4... Lanzar un proceso... 6 4.1... En primer plano... 6 4.2... En segundo plano... 6 5... Formas de detener un proceso... 6 6... Bibliografía... 7 Página 1 de 7 ÍNDICE
1 Introducción Un proceso es un programa o un comando en curso de ejecución en sistema operativo. Como Linux puede llevar a cabo varios procesos al mismo tiempo se dice que es multitarea o multiproceso. Los procesos pueden llevarse a cabo por una orden nuestra o ejecutarse de forma permanente en el sistema mediante un demonio o daemon, que no es más un proceso ejecutado en segundo plano que está pendiente de todo lo que sucede en el sistema y reacciona a ello. Así, hay demonios para el servidor Web Apache o el planificador de tareas. 2 Árbol de procesos y PID Todo proceso ejecutado en un sistema Unix se identifica por un número único, el Process Identifier o PID, que el sistema almacena en una tabla de procesos para la gestión de tareas. El número PID asignado a un proceso lo da el núcleo de Linux al iniciar el programa y no existe forma de predecirlo. Además, un número de PID no se libera automáticamente cuando el programa que ejecuta el proceso se cierra. De esta forma se evita el riesgo de enviar una señal a otro proceso cuando el proceso destinario termina de otra manera, entre el momento de uso del comando ps para identificar el PID y el momento de ejecución del comando kill. Los programas utilizan dos comandos para crear procesos: fork y exec. La primera orden permite que un proceso cree un clon de sí mismo, la segunda usa ese clon para ejecutar el código de otro programa en su lugar. De ello resulta un parentesco entre procesos. Así, se habla de procesos hijos y padres. Todo proceso tiene que tener obligatoriamente un padre, salvo el primer proceso del sistema: init. Este es pues el antecesor de todos los procesos del sistema y su PID es 1. 3 Comandos de visualización de procesos 3.1 ps Permite ver la lista de procesos del sistema, presentando una imagen simplificada de las estructuras del núcleo que administran los procesos. Extrae toda la información del pseudo-sistema de archivos /proc en el que el núcleo coloca toda la información respecto al estado del sistema en curso de ejecución. Es un comando con muchas opciones, que se pueden ver solicitando la ayuda del comando o en el manual. La información mostrada por este comando es: %CPU %MEM CMD GID NI PID PPID RSS Porcentaje de tiempo de procesador utilizado desde el lanzamiento del comando. Porcentaja de uso de la memoria disponible. Nombre del comando que originó el proceso. Identidad del grupo bajo el cual se ejecuta el proceso. Nivel de prioridad del proceso. Identificador del proceso Identificador del proceso padre Cantidad de memoria RAM utilizada, en KB. Página 2 de 7
STIME STAT TIME TT/TTY UID Fecha de lanzamiento del proceso. Estado del proceso, que está compuesto por tres caracteres: Primer carácter, que indica el estado del proceso: Running (en ejecución), stopped (parado), Sleeping (en espera de procesador), Device (dormido en espera de recurso) y Zombie (terminado). Segundo carácter, que indica si el proceso se ha movido al espacio de paginación: si aparece una W se ha movido. Tercer carácter, que indica la prioridad. Una N indica poca prioridad y un símbolo de menor que (<) mayor prioridad. Tiempo total de uso de la CPU. Nombre del terminal al que está asociado el proceso. Identidad del usuario bajo la cual se ejecuta el proceso. ps opción Listado de opciones: -A Muestra todos los procesos. -a Muestra los procesos del terminal. -e Muestra todos los procesos, como A. -f Muestra toda la información de cada proceso lanzado por el usuario conectado. u Muestra información avanzado de cada proceso lanzado por el usuario conectado. -x Muestra los procesos no vinculados a un terminal, es decir, aquellos lanzados por comandos. Ejemplo: josemariatc@curso:~$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.2 0.0 2032 720? Ss 13:43 0:00 init [2] root 2 0.0 0.0 0 0? S 13:43 0:00 [kthreadd] root 3 0.0 0.0 0 0? S 13:43 0:00 [migration/ 3.2 top Permite visualizar la actividad del procesador en tiempo real, mostrando una lista que se actualiza de forma automática. Tiene las mismas columnas que el comando ps pero, además, nos permite modificar las columnas presentadas de forma interactiva, pulsando la tecla efe (f) y seleccionándola del menú. Para salir de este comando hay que pulsar la tecla q. Pulsando la tecla k, enviamos señales a los procesos cuando éstos están lanzados. Página 3 de 7
top -hv -bcissh -d delay -n iterations [-u user -U user] -p pid [,pid...] Listado de opciones -d Tiempo transcurrido entre actualizaciones en segundos. -n Número de veces que actualiza la información. Después, sale al terminal. -u Muestra todos los procesos de un usuario Ejemplo: 3.3 pstree Permite mostrar los nombres de los procesos de forma jerárquica, lo que nos permite conocer su filiación o parentesco. pstree [ -a ] [ -c ] [ -h -H PID ] [ -l ] [ -n ] [ -p ] [ -u ] Listado de opciones: [ -A -G -U ] [ PID USER ] -a --arguments Muestra init primero, el resto hacia abajo y la derecha. -c --compact No cerrar subárboles idénticos. -h --highlight-all Destaca los procesos en curso de ejecución: -H PID --highlight-pid=pid Muestra los proceso padres. -l --long No corta líneas largas -n --numeric-sort Ordenar por número de PID -p --show-pids Mostrar PIDs, implica c. -u --uid-changes Mostrar UID. -U --unicode Usar UTF-8 (Unicode. -V --version Muestra información sobre el commando. PID USER Ejemplo: Comienza con este PID; por defecto comienza en 1 (init) Muetra el árbol de procesos para un usuario específico. josemariatc@curso:~$ pstree -a init NetworkManager Página 4 de 7
dhclient -d -4 -sf /usr/lib/networkmanager/nm-dhcp-client.action - pf /var/run/dhclient-eth0.pid -lf... Página 5 de 7 {NetworkManager} VBoxClient --clipboard {VBoxClient} VBoxClient --display {VBoxClient} VBoxClient --seamless {VBoxClient} VBoxService acpid atd 6*[{VBoxService}] bluetoothd bonobo-activati --ac-activate --ior-output-fd=18 3.4 kill Permite terminar un proceso, enviando el número de proceso como argumento. kill [-señal] pid Listado de opciones: 3.5 killall Permite terminar un proceso, enviando el nombre un comando como argumento. killall [OPTION]... [--] NAME... Listado de señales: SIGHUP 1 Hang Up. Es la señal que se envía cuando un usuario se desconecta del terminal, finalizando el proceso SIGINT 2 Interrupción desde el teclado con la combinación Control+C. El comportamiento predeterminado es finalizar el proceso. SIGQUIT 3 Salida por teclado con Control+\. Termina el proceso y guarda una copia del espacio de memoria en una archivo llamado core, muy útil para la depuración de aplicaciones.
SIGKILL 9 Ningún proceso puede ignorar esta señal, que termina inmediatamente el proceso sin proceder a ninguna operación de limpieza. Es la última opción a utilizar si un proceso no responde. SIGTERM 15 Señal predeterminada del comando kill. Termina el proceso. SIGCHLD 17 Señala a un proceso la parada o terminación de sus hijos. Ejemplo: 3.6 jobs Muestra un listado de los procesos en curso de ejecución que han sido lanzados desde el terminal en el que se escribe. uso: jobs [-lnprs] [jobspec...] jobs -x command [args] 4 Lanzar un proceso 4.1 En primer plano Simplemente, escribimos el nombre del comando con sus eventuales opciones y/o argumentos. 4.2 En segundo plano Añadimos al final de la línea de comando el carácter & 5 Formas de detener un proceso Hay tres formas de detener prematuramente un proceso en primer plano: 1. Escribir la combinación de teclas [Ctrl]+[c]. La señal 2 se envía al proceso de ejecución. 2. Pulsar la combinación de teclas [Ctrl]+[\]. La señal 3 es enviada al proceso. 3. Identificar el PID del proceso en otro terminal y lanzar el comando kill. Además, este es el único modo de detener un proceso en segundo plano. Página 6 de 7
6 Bibliografía LINUX. Principios básicos del uso del sistema. Ediciones ENI. Serie: Recursos Informáticos. Guía oficial de instalación de Debian 6.0. en el sitio web oficial de Debian. Sitio web oficial de GNU: http://www.gnu.org/home.es.html. Sitio web oficial de FHS: http://www.pathname.com/fhs/. Manual Linux eminentemente práctico, que puedes obtener en este enlace: http://personal.us.es/echevarria/documentos/manuallinuxzonasiete.pdf. Página 7 de 7 BIBLIOGRAFÍA