Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org
Licencia Creative Commons
© 1999-2026 Joel Barrios Dueñas. Este manual se distribuye bajo la licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0). Usted es libre de compartir y adaptar el material bajo los siguientes términos: debe dar crédito al autor, no puede utilizarlo para fines comerciales y debe compartir las obras derivadas bajo la misma licencia. La licencia completa está disponible en https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.es.
En este documento aprenderá el uso de free, jobs, bg, fg, kill, killall, ps, top y taskset. Este manual forma parte de una secuencia didáctica que incluye ejercicios prácticos en clase, alternando entre sesiones como superusuario (root) y usuario regular. Se recomienda completar los manuales previos sobre gestión de cuentas de usuario y mandatos básicos para un mejor aprovechamiento.
Un PID (Process ID) o identidad de proceso, es un decimal entero que especifica un proceso o un grupo de procesos. Todos los procesos que se ejecuten en un sistema pueden ser terminados o aniquilados utilizando kill o bien killall, excepto por el proceso con PID 1, el cual corresponde siempre a /sbin/init.
Un Job ID o identidad de trabajo, identifica un trabajo o grupo de trabajos que se ejecutan en segundo plano. Puede utilizar kill para terminar o aniquilar los trabajos originados de una misma consola o intérprete de mandatos en ejecución.
Los trabajos se gestionan a través de bg, fg y jobs. Los procesos se terminan normalmente con SIGTERM (número de señal 15) o bien se aniquilan con SIGKILL (número de señal 9), utilizando kill o killall.
Ingrese al sistema como root.
Todos los paquetes necesarios para realizar los procedimientos de este documento deben estar instalados de modo predeterminado, puesto que son componentes críticos para el sistema.
Si utiliza Fedora™ o Red Hat™ Enterprise Linux o sus derivados modernos (AlmaLinux, Rocky Linux), ejecute lo siguiente para instalar o actualizar los paquetes necesarios:
dnf -y install psmisc procps-ng util-linux
Si utiliza ALDOS, ejecute lo siguiente para instalar o actualizar los paquetes necesarios:
yum -y install psmisc procps-ng util-linux
Cierre la sesión como root e ingrese nuevamente al sistema como usuario regular (por ejemplo, fulano) o bien ejecute lo siguiente:
su -l fulano
Se trata de una herramienta que muestra un resumen fácil de entender del contenido de /proc/meminfo. Muestra la cantidad de memoria utilizadas y disponible en el sistema.
De modo predeterminado free muestra la información en escala de KiB. Ejecute lo siguiente:
free
Lo anterior debe devolver una salida similar a la siguiente:
total used free shared buffers cached
Mem: 2956352 2752032 204320 0 159592 1509388
-/+ buffers/cache: 1083052 1873300
Swap: 6291448 167468 6123980
Ejecute lo siguiente para ver la la salida en MiB:
free -m
Lo anterior debe devolver una salida similar a la siguiente:
total used free shared buffers cached
Mem: 2887 2712 174 0 156 1487
-/+ buffers/cache: <span style="color:darkred;">1068 1818</span>
Swap: 6143 163 5980
La interpretación de ésta última salida indica lo siguiente:
Ejecute lo siguiente para mostrar lo anterior con una fila con los totales en MiB:
free -mt
Lo anterior debe devolver una salida similar a la siguiente:
total used free shared buffers cached
Mem: 2887 2712 174 0 156 1487
-/+ buffers/cache: 1068 1818
Swap: 6143 163 5980
Total: 9031 2876 6154
Puede consultar otras opciones de free a través de su página de manual ejecutando lo siguiente:
man 1 free
Ejecute sleep con el valor 600 (pausa por 60 segundos), a fin de utilizar éste como trabajo de ejemplo.
sleep 600
Pulse CTRL+Z, lo cual devolverá una salida similar a la siguiente:
^Z
[1]+ Detenido sleep 600
Ejecute jobs para visualizar el trabajo detenido:
jobs
Lo anterior debe devolver la siguiente salida:
[1]+ Detenido sleep 600
Ejecute bg para reactivar el trabajo 1 en segundo plano:
bg 1
La salida deberá devolver lo siguiente:
[1]+ sleep 600 &
Ejecute nuevamente sleep, con el valor 700 y un signo amperson (&) al final:
sleep 700 &
La salida devolverá algo similar a lo siguiente, indicando el número de trabajo (2) y el número de identidad de proceso (PID):
[2] 3768
Con lo anterior habrá enviado este trabajo directamente a segundo plano.
Ejecute jobs para visualizar los trabajos en segundo plano:
jobs
La salida será similar a:
[1]- Ejecutando sleep 600 &
[2]+ Ejecutando sleep 700 &
Ejecute fg con 1 como argumento para enviar a primer plano el primer trabajo:
fg 1
Lo anterior hará que sleep 600 regrese a primer plano.
Para terminar este último trabajo, pulse CTRL+C.
Ejecute ps con las opciones aux (todos los procesos en todas las terminales, orientado a usuarios e incluyendo todos los procesos con o sin un TTY), utilizando una tubería (|) con less para poder observar cómodamente la salida y los valores de las columnas USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME y COMMAND.
ps aux |less
Ejecute de nuevo lo anterior pero utilizando una tubería (|) y grep para visualizar solamente los procesos cuyo nombre incluyan la cadena sleep:
ps aux |grep sleep
Lo anterior le devolverá una salida similar a la siguiente:
fulano 3768 0.0 0.0 100984 568 pts/2 S 11:50 0:00 sleep 700
fulano 3820 0.0 0.0 103396 832 pts/2 S+ 11:51 0:00 grep --color=auto sleep
La segunda columna corresponde al número de identidad de proceso (PID), determine el correspondiente al procesos sleep 700.
Ejecute kill con este número de identidad de proceso, con la finalidad terminar éste de manera normal (SIGTERM).
kill 3768
Lo anterior devolverá la siguiente salida:
[2]+ Terminado sleep 700
Ejecute de nuevo sleep, ahora con 800 como argumento, con un signo amperson (&) al final, a fin de generar un nuevo trabajo en segundo plano.
sleep 800 &
Lo anterior debe devolver una salida similar a la siguiente:
[1] 3820
La forma más sencilla de terminar de manera normal (SIGTERM) un trabajo es ejecutando kill con el número de trabajo precedido por un signo %, como argumentos. Ejemplo:
kill %1
La salida solo devolverá el símbolo de sistema. Si vuelve a pulsar la tecla ENTER, la salida será similar a la siguiente:
[1]+ Terminado sleep 800
Ejecute de nuevo sleep con 850 como argumento y un signo amperson (&) al final para generar un nuevo trabajo en segundo plano.
sleep 850 &
Lo anterior debe devolver una salida similar a la siguiente:
[1] 3830
Ejecute nuevamente ps con las opciones aux, agregando una tubería y grep para visualizar en la salida solamente los procesos cuyo nombre incluyan la cadena sleep:
ps aux |grep sleep
Lo anterior le devolverá una salida similar a la siguiente:
fulano 3830 0.0 0.0 100984 564 pts/2 S 11:54 0:00 sleep 850
fulano 3835 0.0 0.0 103396 828 pts/2 S+ 11:56 0:00 grep --color=auto sleep
Determine el número de identidad de proceso correspondiente al procesos sleep 850.
Ejecute kill con este número de identidad de proceso, correspondiente a sleep 850, con la finalidad aniquilar éste (SIGKILL).
kill -9 3830
Lo anterior debe devolver la siguiente salida:
[1]+ Terminado (killed) sleep 850
Ejecute lo siguiente para generar dos nuevos trabajos en segundo plano:
sleep 600 & sleep 700 &
Lo anterior devolverá algo similar a lo siguiente:
[1] 3924
[2] 3925
Ejecute jobs para visualizar ambos trabajos:
jobs
Lo anterior deberá devolver la siguiente salida:
[1]- Ejecutando sleep 600 &
[2]+ Ejecutando sleep 700 &
Ejecute ps, con la opción -j, para visualizar los números de identidad de proceso (PID) de estos trabajos:
ps -j
Lo anterior debe devolver una salida similar a la siguiente:
PID PGID SID TTY TIME CMD
3624 3624 3624 pts/2 00:00:00 bash
3924 3924 3624 pts/2 00:00:00 sleep
3925 3925 3624 pts/2 00:00:00 sleep
3937 3937 3624 pts/2 00:00:00 ps
Ejecute killall con la cadena «sleep» como argumento, a fin de terminar de manera normal de todos los procesos denominados sleep.
killall sleep
Lo anterior deberá devolver la siguiente salida:
[1]- Terminado sleep 600
[2]+ Terminado sleep 700
Ejecute lo siguiente para generar dos nuevos trabajos en segundo plano:
sleep 800 & sleep 900 &
Lo anterior devolverá algo similar a lo siguiente:
[1] 3949
[2] 3950
Ejecute jobs para visualizar ambos trabajos:
jobs
Lo anterior deberá devolver la siguiente salida:
[1]- Ejecutando sleep 800 &
[2]+ Ejecutando sleep 900 &
Ejecute ps, con la opción -j, para visualizar lo números de identidad de proceso (PID) de estos trabajos:
ps -j
Lo anterior debe devolver una salida similar a la siguiente:
PID PGID SID TTY TIME CMD
3624 3624 3624 pts/2 00:00:00 bash
3949 3949 3624 pts/2 00:00:00 sleep
3950 3950 3624 pts/2 00:00:00 sleep
3956 3956 3624 pts/2 00:00:00 ps
Ejecute killall, con la opción -s y el valor 9, junto con la cadena «sleep» como argumento, a fin de aniquilar (terminación anormal) de todos los procesos denominados sleep.
killall -s 9 sleep
Lo anterior deberá devolver la siguiente salida:
[1]- Terminado (killed) sleep 800
[2]+ Terminado (killed) sleep 900
Ejecute tar con las opciones Jcf para generar el archivo pixmaps.tar.xz con el contenido del directorio /lib/modules, ejecutando lo siguiente:
tar Jcf modulos.tar.xz /lib/modules
Al terminar utilice time para cuantificar la ejecución de tar con las opciones jxf para descomprimir el archivo modulos.tar.xz. El objetivo será cuantificar la descompresión con la prioridad de planificación 0 (valor predeterminado del sistema), la cual permite utilizar los recursos que regularmente permite utilizar el sistema al usuario.
time tar Jxf modulos.tar.xz
La salida debe devolver algo similar a lo siguiente:
real 0m13.237s
user 0m12.491s
sys 0m1.824s
Ejecute nuevamente time con nice para ejecutar tar con las opciones Jxf para descomprimir el archivo modulos.tar.xz. El objetivo será realizar la descompresión cambiando la prioridad de planificación a 10 ―valor predeterminado de nice― a fin de utilizar menos recursos de sistema.
time nice -n +10 tar Jxf modulos.tar.xz
La salida debe devolver algo similar a lo siguiente:
real 0m13.638s
user 0m12.947s
sys 0m1.908s
Los resultados deberán ser ligeramente mayores que la ejecución con el valor predeterminado de prioridad de planificación (0).
Ejecute nice con la opción -n y el valor 19, para ejecutar tar con las opciones Jxf, con la menor prioridad posible, para descomprimir el archivo modulos.tar.xz. El objetivo será realizar la descompresión cambiando la prioridad de planificación a 19, a fin de utilizar la menor cantidad de recursos posible.
time nice -n +20 tar Jxf modulos.tar.xz
La salida debe devolver algo similar a lo siguiente:
real 0m13.918s
user 0m13.045s
sys 0m1.875s
Los resultados deberán ser sensiblemente mayores que la ejecución con el valor predeterminado de prioridad de planificación (0).
El usuario regular solo pude definir valores de prioridad de planificación del 0 al 19, prioridad de planificación predeterminada a prioridad de planificación menos favorable. Los valores negativos, del -1 al -20, que son los más favorables, sólo los pude utilizar root.
Ejecutando su con la opción -c, con la cual se indicará entre comillas cualquier cosa para ser ejecutada como root, repita lo anterior pero con valor -20 para nice.
su -c "time nice -n -20 tar Jxf modulos.tar.xz"
Lo anterior solicitará se ingrese la clave de acceso de root y devolverá una salida similar a la siguiente:
real 0m13.328s
user 0m12.834s
sys 0m1.978s
Los resultados deberán ser sensiblemente inferiores que la ejecución con el valor predeterminado de prioridad de planificación (0).
Lo anterior generará un directorio denominado lib dentro del directorio de inicio del usuario, pero éste es propiedad de root, por lo cual el usuario regular será incapaz de eliminar. Elimine éste antes de continuar o bien se va a repetir procedimientos.
su -c "rm -fr /home/fulano/lib"
Renice sirve para cambiar la prioridad de planificación de procesos en ejecución por número de proceso, usuario o grupo. Los valores de prioridad de planificación se pueden visualizar utilizando ps con las opciones alx (todos los procesos en todas las terminales, en formato largo e incluyendo todos los procesos con o sin un TTY, respectivamente). Ejecute lo siguiente:
ps alx |less
Lo anterior mostrará las columnas F, UID, PID, PPID, PRI, NI, VSZ, RSS, WCHAN, STAT, TTY, TIME y COMMAND. Los valores de prioridad planificada corresponden a la sexta columna (NI). Para salir pulse la tecla q.
El siguiente ejemplo cambia la prioridad de planificación a -10 al proceso que en el ejemplo corresponde al PID 45678:
su -c "renice -n -10 -p 45678"
El siguiente ejemplo cambia la prioridad de planificación a -10 a todos los procesos del usuario fulano:
su -c "renice -n -10 -u fulano"
El siguiente ejemplo cambia la prioridad de planificación a -10 a todos los procesos del grupo desarrollo:
su -c "renice -n -10 -g desarrollo"
El siguiente ejemplo cambia la prioridad de planificación a -10 al procesos 34567 del usuario fulano:
su -c "renice -n -10 -p 34567 -u fulano"
Cambie al usuario root. A partir de este paso sólo podrá realizar los procedimientos con privilegios de root.
Taskset (asignador de tareas) sólo tiene sentido utilizarlo cuando se dispone de más de un CPU lógico en el sistema. Ejecute nproc para determinar el número de CPUs lógicos en el sistema:
nproc
Lo anterior sólo devolverá el número de CPUs lógicos del sistema.
Ejecute lscpu para obtener información más detallada:
lscpu
Asumiendo que el sistema dispone de ocho núcleos lógicos, lo anterior puede devolver una salida similar a la siguiente:
Arquitectura: x86_64
modo(s) de operación de las CPUs: 32-bit, 64-bit
Tamaños de las direcciones: 43 bits physical, 48 bits virtual
Orden de los bytes: Little Endian
CPU(s): 8
Lista de la(s) CPU(s) en línea: 0-7
ID de fabricante: AuthenticAMD
Nombre del modelo: AMD Ryzen 5 2400G with Radeon Vega Graphics
Familia de CPU: 23
Modelo: 17
Hilo(s) de procesamiento por núcleo: 2
Núcleo(s) por «socket»: 4
«Socket(s)»: 1
Revisión: 0
Aumento de frecuencia: activada
CPU(s) scaling MHz: 48%
CPU MHz máx.: 3600.0000
CPU MHz mín.: 1600.0000
BogoMIPS: 7186.44
...
Características de virtualización:
Virtualización: AMD-V
Cachés (suma de todas):
L1d: 128 KiB (4 instancias)
L1i: 256 KiB (4 instancias)
L2: 2 MiB (4 instancias)
L3: 4 MiB (1 instancia)
NUMA:
Modo(s) NUMA: 1
CPU(s) del nodo NUMA 0: 0-7
Vulnerabilidades:
Gather data sampling: Not affected
Indirect target selection: Not affected
Itlb multihit: Not affected
L1tf: Not affected
Mds: Not affected
Meltdown: Not affected
Mmio stale data: Not affected
Reg file data sampling: Not affected
Retbleed: Mitigation; IBPB; SMT vulnerable
Spec rstack overflow: Mitigation; IBPB
...
Srbds: Not affected
Tsa: Not affected
Tsx async abort: Not affected
Vmscape: Mitigation; IBPB on VMEXIT
Lo anterior representa un resumen del contenido del archivo /proc/cpuinfo, que también puede consultarse ejecutando lo siguiente:
less /proc/cpuinfo
Puede utilizar taskset para establecer u obtener la afinidad de CPU de un proceso a través de su PID o bien para ejecutar un nuevo procesos con una afinidad de CPU arbitraria. La afinidad de CPU es una propiedad de planificador del núcleo de Linux (kernel) que vincula un procesos a un conjunto de CPUs en el sistema. Este planificador se encargará de que se mantenga la afinidad de CPU y que el proceso sólo se ejecute en el CPU o en los CPUs especificados. Cabe señalar que de manera nativa el planificador del núcleo de Linux incluye soporte para afinidad natural, la cual consiste en que el planificador intentará mantener los procesos en el mismo CPU tanto como sea práctico para mantener un buen desempeño en el sistema, por lo cual la manipulación de la afinidad de CPU sólo es útil para ciertas tareas y aplicaciones.
Cabe señalar que taskset siempre devolverá un error si se especifica una máscara de bit incorrecta o bien un CPU inexistente.
La afinidad de CPU se representa a través de una máscara de bit (bitmask), donde el bit de menor valor corresponde al primer CPU lógico y el bit mayor corresponde al último CPU lógico. Las máscaras de bit se representan en hexadecimal:
Para iniciar un nuevo proceso con una afinidad de CPU en particular, se utiliza la siguiente sintaxis:
taskset mascara mandato
Ejemplo:
taskset 0x00000001 tar Jcf modulos.tar.xz /lib
Ejecute taskset con la opción -p para indicar que se utilizará un PID existente y el número de PID como argumento ara obtener la afinidad de CPU de un procesos en ejecución:
taskset -p pid
Ejemplo:
taskset -p 34567
Ejecute taskset con la opción -p para indicar que se utilizará un PID existente, la mascara de afinidad de CPU deseada y el número de PID como argumentos ara cambiar la afinidad de CPU de un procesos en ejecución:
taskset -p mascara pid
Ejemplo:
taskset -p 0x00000001 34567
Si se dificulta el uso de máscaras de bit en hexadecimal, también es posible utilizar la opción -c y una lista numérica de CPUs lógicos, donde 0 corresponde al primer CPU, 1 corresponde al segundo CPU lógico, 2 corresponde al tercer CPU lógico y así sucesivamente.
taskset -c -p lista pid
Ejemplo:
taskset -c -p 1 34567
También es posible especificar varios CPU de manera simultánea, definiendo una lista de éstos separada por comas y que también permite definir rangos. Ejemplos:
taskset -c 0,1 tar Jcf modulos.tar.xz /lib
taskset -c -p 0,2 34567
taskset -c -p 4-7 34567
Al terminar los procedimientos, cierre la sesión de root.
Top es una herramienta que proporciona una visualización continua y en tiempo real de los procesos activos en un sistema, como una lista que de modo predeterminado lo hace de acuerdo al uso del CPU. Puede ordenar la lista por uso de memoria y tiempo de ejecución.

Para ordenar la lista de procesos por orden de uso de memoria, pulse SHIFT+M. Para ordena la lista de procesos por orden de tiempo de ejecución, pulse SHIFT+T. Para invertir el orden de la lista, pulse SHIFT+R. Para activar o bien desactivar, la visualización por hilos, pulse SHIFT+H. Para ordenar de nuevo la lista de procesos por orden de uso de CPU, pulse SHIFT+P.
Para mostrar los procesos de un usuario en específico, pulse la tecla u y defina a continuación el nombre del usuario.
Para terminar o aniquilar cualquier proceso, pulse la tecla k y defina a continuación el número de identidad de proceso que corresponda y luego la señal a utilizar (9 o 15).
Para cambiar la prioridad de planificación de cualquier proceso, pulse la tecla r y a continuación defina el número de identidad de proceso que corresponda y luego el valor de prioridad de planificación deseado.
Pulse la tecla h para ver el la ayuda completa de top.