Está en la página 1de 19

Guia de Pratica 1: Procesos

Carlos Geovanny Escobar Portillo

Procesos en linux

La más simple definición de un proceso podría ser que es una instancia de un programa en ejecución
(corriendo). A los procesos frecuentemente se les refiere como tareas. El contexto de un programa
que esta en ejecución es lo que se llama un proceso. Este contexto puede ser mas procesos hijos
que se hayan generado del principal (proceso padre), los recursos del sistema que este
consumiendo, sus atributos de seguridad (tales como su propietario y permisos de archivos asi como
roles y demás de SELinux), etc.

Linux, como se sabe, es un sistema operativo multitarea y multiusuario. Esto quiere decir que
múltiples procesos pueden operar simultáneamente sin interferirse unos con los otros. Cada
proceso tiene la "ilusión" que es el único proceso en el sistema y que tiene acceso exclusivo a todos
los servicios del sistema operativo.
Programas y procesos son entidades distintas. En un sistema operativo multitarea, múltiples
instancias de un programa pueden ejecutarse sumultáneamente. Cada instancia es un proceso
separado. Por ejemplo, si cinco usuarios desde equipos diferentes, ejecutan el mismo programa al
mismo tiempo, habría cinco instancias del mismo programa, es decir, cinco procesos distintos.
Cada proceso que se inicia es referenciado con un número de identificación único conocido como
Process ID PID, que es siempre un entero positivo. Prácticamente todo lo que se está ejecutando en
el sistema en cualquier momento es un proceso, incluyendo el shell, el ambiente gráfico que puede
tener múltiples procesos, etc. La excepción a lo anterior es el kernel en si, el cual es un conjunto de
rutinas que residen en memoria y a los cuales los procesos a través de llamadas al sistema pueden
tener acceso.

ps

El comando ps es el que permite informar sobre el estado de los procesos. ps esta basado en el
sistema de archivos /proc, es decir, lee directamente la información de los archivos que se
encuentran en este directorio. Tiene una gran cantidad de opciones, incluso estas opciones varían
dependiendo del estilo en que se use el comando.

pstree

Muestra los procesos en forma de árbol, pstree --help te da las opciones más comunes. Recomiendo
uses lo uses con la opción -A y -G para que te un árbol con líneas con líneas estilo ASCII y de terminal
VT100 respectivamente, puedes añadir también -u para mostrar entre paréntesis al usuario
propietario del proceso:

kill

El comando kill, que literalmente quiere decir matar, sirve no solo para matar o terminar procesos
sino principalmente para enviar señales (signals) a los procesos. La señal por default (cuando no se
indica ninguna es terminar o matar el proceso), y la sintaxis es kill PID, siendo PID el número de ID
del proceso. Asi por ejemplo, es posible enviar una señal de STOP al proceso y se detendrá su
ejecución, después cuando se quiera mandar una señal de continuar y el proceso continuara desde
donde se quedo.

jobs

Si por ejemplo, se tiene acceso a una única consola o terminal, y se tienen que ejecutar varios
comandos que se ejecutarán por largo tiempo, se pueden entonces como ya se vió previamente con
nohup y el operador '&' mandarlos a segundo plano o background con el objeto de liberar la terminal
y continuar trabajando.

top

Una utilería muy usada y muy útil para el monitoreo en tiempo real del estado de los procesos y de
otras variantes del sistema es el programa llamado top, se ejecuta desde la línea de comandos, es
interactivo y por defecto se actualiza cada 3 segundos.
Desarrollo de guia 1

1) Iniciar CentOS y abriendo la consola de comandos.

2) Ejecución del comando ps -e que muestra los procesos que están corriendo en la máquina.
3) El comando ps aux muestra los procesos ejecutándose en la máquina, con la opción “a”
muestra los que están asociados a una terminal, “x” a los que no están asociados a una
terminal y “u” muestra el resultado en forma legible.

La información de los procesos se ordena en una tabla con los siguientes campos:

USER: Usuario que ejecuto el proceso.

PID: Numero de ID del proceso en ejecución.

%CPU: Porcentaje del CPU utilizado en cada proceso

%MEN: Porcentaje de Memoria física de la maquina utilizada por el proceso

VSZ: Tamaño de Memoria Virtual del proceso en KiB.

RSS: Porción de memoria física intercambiable utilizada por el proceso.

TTY: Controlador tty (Terminal), para los procesos que son lanzados desde terminal.

STAT: Código de un carácter que muestra el estado de un proceso

START: Tiempo que tardo el proceso en iniciarse.

TIME: Tiempo CPU acumulado en cada proceso, se muestra en el formato MM:SS

COMMAND: Comando que ejecuto el proceso con todos sus argumentos.


4) El comando top muestra las tareas que se estan ejecutando en nuestro sistema linux,
en tiempo real.
5)Al ejecutar el comando top -u geovanny muestra los proceso que el geovanny tiene en
ejecucion.
6) procedemos a ejecutar el comando top nos muestra que el proceso xorg tiene el PID
1941.

Si nos dirigimos a la carpeta /proc veremos las carpetas de los procesos.

Los carpetas pertenecen a los usuarios que han iniciado los procesos

Entramos a la carpeta 1941 que es PID con que se identifica el proceso Xorg se pueden ver
el sistema de archivo del proceso.
En los sistemas operativos tipo Unix, procfs es la abreviatura de sistema de ficheros de
procesos (process filesystem).Un pseudo sistema de ficheros que se utiliza para permitir el
acceso a la información del kernel sobre los procesos. Dado que proc no es un sistema de
ficheros real, no consume ningún espacio de almacenamiento, y sólo consume una limitada
cantidad de memoria.

Bajo GNU/Linux, /proc proporciona información sobre cualquier proceso en ejecución en


/proc/PID, pero además incluye:

● Un enlace simbólico al proceso actual en /proc/self


● Información sobre el hardware, kernel y la configuración de módulos
● Acceso a las opciones dinámicamente configurables del kernel bajo /proc/sys

Las utilidades básicas que utilizan /proc bajo Linux se encuentran en el paquete procps, y
necesitan que /proc esté montado para realizar su función.

En el kernel 2.6, la mayoría de los ficheros no relacionados con los procesos que se
encontraban en /proc se movieron a otro sistema de ficheros virtual llamado sysfs (montado
en /sys).

7) Se ejecueta el comando File -i archivo para saber el tipo de archivo que son limist y status:
Estos archivos son del tipo inode/x-empty con contenido binario.

Adentros del archivo limist se encuentra informacion de configuracion del core del

proceso Xorg.

En el archivo status podemos encontrar informacion sobre el proceso Xorg


8) Se ejecuto el comando yes hola para poder “matarlo” en siguiente comando.

9) Con la convinacion tecla ctrl+c mata el proceso.


Con la convinacion ctrl+z se detiene el proceso pero se puede volver a ejecutar.

10) Vamos a mandar la salida que devuelve el proceso a un archivo especial llamado null que se
encuentra en /dev/null. Este archivo binario vacio del tipo inode/chardevice y su prepietario es el
usuario root.

Ejecutamos el comando yes adios > /dev/null


No se puede ejecutar la consola asi que usamos ctrl+c para detener el proceso , podemos ver que
auque se mando escribir una salida al archivo este no se guardo en el archivo null.

11) Volvemos a ejecutar el comando yes que tal > /dev/null.

12) Identificamos el PID del proceso yes

Los procesos fueron detenidos usando el comando kill se uso dos opciones para detener el
proceso que son:

-9 SIGKILL(Kill signal)

-15 SIGTERM(Termination signal)


La diferencia es que -9 manda una señal que mata el proceso y -15 manda una señal que el
proceso se termine por su propia cuenta.

Proceso terminado con el comando kill -9 PID:

Proceso terminado con el comando kill -15 PID:

13) Volvemos a mandar el comando yes que tal > /dev/null y en otra terminal vemos el PID del
comando y matamos el comando con kill -9 PID

14) Vamos a escribir el comando yes que tal > /dev/null y se incluirá al final un & para que el
proceso se mande a segundo plano y se pueda seguir usando la terminal donde se lanzó el
proceso.
15) Se escribe el comando Jobs -l para ver los procesos que son iniciados desde una terminal (son
hijos de una terminal). La opción -l muestra los id de los procesos además de toda información
normal.

En la terminal muestra el proceso yes como ejecutado aparte de su PID y el comando donde se
envió. Al ver el proceso en tiempo real vemos que el porcentaje de CPU que consume el proceso
98.8 y se revisa con ps muestra que estado es R (running) y que proceso fue lanzado de un
terminal.

16) Con el comando pstree muestra un árbol de donde viene cada proceso. Un proceso puede dar
origen a otro proceso y con este comando podemos ver los procesos padres que llevan hasta yes.
En este caso el proceso yes y pstree tiene como padre a bash y este a su vez al terminal
Konsole(Terminal).

17) Se ingresado el comando yes mensaje > /dev/null, ahora se están ejecuntando dos procesos
yes en segundo plano. Con el pstree -h vamos a ver que se identifican que yes está corriendo dos
procesos y que los dos tienen de padre a bash.

Usamos el comando top para ver el consumo de CPU que generan los dos procesos.

El consumo de CPU por cada uno es 49% cada uno del 100% que se le ha dado proceso yes, con
esto vemos que cuando se van sumando mas proceso que vienen del mismo hilo la memoria se
reparte en cada hilo.

18) Podemos ver al ejecutar el comando Jobs que los dos procesos aparecen con el estado de
Ejecutando y que el orden en que fueron lanzados esta indetificado por un numero entre
corchetes, además de un + y un - donde - es el comando que se ejecutó primero y + el segundo

19) Como los procesos se están ejecuntado en segundo plano no se pueden detener usando
comandos del teclado como ctrl+c o ctrl+z.
20) Matamos la segunda tarea usando kill -9 3148

21) Comprobamos por medio de Jobs que solo este una tarea ejecutándose.

Como vemos el segundo proceso que matamos se nos muestra con el estado Terminado (killed)

22) Mandamos una nueva tarea yes mensaje2 > /dev/null. Luego usamos el comando ctrl+z para
detenerlo.

23) Comprobamos que este detenido usando Jobs.

24) Recuperamos la tarea detenida y la ponemos en primer plano con el comando fg.

25)Usamos el comando ctrl+z para detener el la tarea nuevamente.


Volvemos iniciar la tarea, pero ahora en segundo plano con el comando bg.

Usamos Jobs para ver proceso ejecutándose en segundo plano.

Ahora la detenemos usado kill -19 3389 y comprobamos con Jobs.

26) Creamos nuevos procesos mensajes3 y mensaje4 para detenerlos con kill -19 y volverlos a
correr con los comandos bg y fg.

27)Ejecutamos el comando pstree y comprobamos que bash es el antecesor directo de los


procesos yes y que bash deciende de Konsole (terminal) y este asu vez deciende de init.
Ejecutamos los procesos para ver cuáles son los que consumen más memoria. Para usamos top -u
Geovanny y vemos que las tareas yes las que consume más memoria.

Al cerrar la ventana donde se lanzaron las tareas top vemos que las tareas yes han sido “matadas”
esto se debe a que la tarea padre konsole fue terminada y eso hizo que los procesos hijos también
fueran terminados.

28) Crond es programa que se encarga de ejecutar tareas a una hora y fecha establecida, crond
desciende directamente del proceso init. Por lo que siempre está en ejecución.
29) Para agregar tareas a crond se debe editar el fichero corntab con cualquier editor, en este
ejemplo usaremos nano. Ejecutamos el comando $sudo nano /etc/crontab.

Como se muestra en la imagen para programar una tarea solo debe agregar una línea con el
siguiente formato min. - hr. - d. mes - mes - d. sem. - us. - mandato, para se ejecute en tiempo
establecido.

30) Se ha agregado una nueva tarea al crostab, que escribe la frase “Otra vez aqui” en un archivo
aquí, cada 3 minutos.
31) Crearemos un comando nuevo que cree una carpeta en el Escritorio, dentro ella crear un
archivo llamado log y por medio del comando echo escribir “Hoy es dia 3 de junio” y que se
ejecute cada 3 de junio.

32) Guardamos los comandos que usamos en la pratica usando histori >mandatos_pratica_18

También podría gustarte