Procesos y Gestión del Sistema
Estos comandos te permiten ver qué está haciendo tu sistema, cómo se utilizan los recursos, y tomar el control sobre los procesos en ejecución: detenerlos, reanudarlos, ajustar su prioridad o terminarlos.
ps — Instantánea de Procesos
El comando ps (process status) muestra los procesos que se están ejecutando en el momento exacto en que se invoca. A diferencia de top, es una foto fija, no una vista dinámica.
Opciones principales
| Opción | Descripción |
|---|---|
| aux | Muestra todos los procesos (a), incluyendo los sin terminal (x), con formato de usuario (u). El más usado. |
| ef | Muestra todos los procesos (e) con formato completo (f). Útil para ver la línea de comandos completa y la jerarquía. |
| -u usuario | Filtra los procesos de un usuario específico. |
| -ejH | Muestra los procesos en formato árbol (Hierarchy). |
Ejemplo — Ver procesos del usuario jose
ps aux | grep jose
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND jose 1234 0.0 0.1 123456 4568 ? Ss 07:08 0:00 /usr/bin/gnome-shell jose 5678 0.0 0.0 12300 1024 pts/0 R+ 07:08 0:00 grep --color=auto jose
Ejemplo — Ver jerarquía (árbol) de procesos
ps ef
UID PID PPID C STIME TTY TIME CMD root 654 2 0 07:05 ? 00:00:00 /usr/lib/systemd/systemd --user jose 1234 654 0 07:06 ? 00:00:01 \_ /usr/bin/gnome-shell
Buscar un proceso específico
ps aux | grep python # Buscar procesos Python ps -ejH # Árbol completo del sistema
top — Monitor Dinámico en Tiempo Real
El comando top proporciona una vista dinámica y continua de la actividad del sistema, incluyendo el uso de CPU, memoria y los procesos que más consumen recursos. Se actualiza automáticamente cada pocos segundos.
top # Vista general top -u jose # Filtrar por usuario
Controles interactivos dentro de top
| Tecla | Acción |
|---|---|
| P | Ordenar por uso de CPU (predeterminado) |
| M | Ordenar por uso de Memoria |
| k | Kill — terminar un proceso (pide el PID) |
| r | Renice — cambiar la prioridad de un proceso |
| q | Salir de top |
htop — Monitor Interactivo Mejorado
htop es una alternativa a top más moderna y visualmente amigable. Permite desplazarse horizontal y verticalmente e interactuar con los procesos de forma más intuitiva.
sudo apt install htop
htop
Ventajas sobre top y controles
| Tecla | Acción |
|---|---|
| F6 | Ordenar los procesos por cualquier columna |
| F9 | Enviar señal de terminación (kill) al proceso seleccionado |
| F10 / q | Salir de htop |
| ↑ ↓ ← → | Navegar por la lista de procesos |
jobs — Listar Trabajos de la Sesión
El comando jobs muestra una lista de los trabajos (comandos) que están actualmente activos y asociados a tu sesión de terminal. Es el punto de partida para gestionar procesos con fg y bg.
Crear trabajos de ejemplo
sleep 3600 &
[1] 12345
↑ Job ID ↑ PID del proceso
nano prueba.txt
# Una vez dentro de nano: presiona Ctrl+Z para suspender
^Z [2]+ Stopped nano prueba.txt
jobs
[1]- Running sleep 3600 & [2]+ Stopped nano prueba.txt
+ indica el trabajo actual (usado por defecto si no especificas número). El - es el trabajo anterior. Los comandos fg y bg sin argumento actúan sobre el trabajo +.Comandos de gestión de trabajos
| Comando | Acción |
|---|---|
| fg %N | Trae el trabajo N al primer plano (foreground) |
| bg %N | Reanuda el trabajo N en segundo plano (background) |
| kill %N | Termina el trabajo N por su Job ID |
| comando & | Inicia un comando directamente en segundo plano |
| Ctrl+Z | Suspende el proceso activo y lo añade a la lista de jobs |
fg — Traer un Trabajo a Primer Plano
El comando fg (foreground) trae un trabajo que está detenido o en segundo plano de vuelta al primer plano, permitiéndote interactuar con él directamente en la terminal.
jobs # [1]- Running sleep 60 & # [2]+ Stopped nano ejemplo.txt fg %2 # Trae nano al primer plano para seguir editando
(Se abre el editor nano para continuar editando el archivo.)
bg — Reanudar un Trabajo en Segundo Plano
El comando bg (background) reanuda un trabajo detenido y lo mueve para que se ejecute en segundo plano, liberando la terminal.
jobs # [1]- Running sleep 60 & # [2]+ Stopped nano ejemplo.txt bg %2 # Intenta reanudar nano en segundo plano
[2]+ nano ejemplo.txt & jobs [1]- Running sleep 60 & [2]+ Stopped nano ejemplo.txt ← ¡Sigue detenido!
nano es un editor interactivo: necesita leer del teclado y escribir en la terminal (TTY). Cuando está en segundo plano e intenta acceder al terminal, el kernel le envía automáticamente la señal SIGTTIN o SIGTTOU y lo detiene de nuevo. bg solo es útil para procesos no interactivos (como sleep, scripts, compilaciones…).nano, vim o less, siempre usa fg %N para volver a trabajar con ellos. bg es para procesos que pueden ejecutarse sin la terminal.kill — Enviar Señales a un Proceso por PID
El comando kill envía una señal a un proceso identificado por su PID. La señal más común es SIGTERM (terminación elegante) pero puede enviar cualquier señal del sistema.
Señales principales
Ejemplo — Terminación elegante (SIGTERM)
sleep 1000 & # [1] 12345 kill 12345 # Envía SIGTERM (señal 15 por defecto)
[1]+ Terminated sleep 1000
Ejemplo — Terminación forzada (SIGKILL)
sleep 1000 & # [1] 12346 kill -9 12346 # Si el proceso no responde a SIGTERM
[1]+ Killed sleep 1000
kill PID primero (SIGTERM). Solo usa kill -9 PID si el proceso está colgado o ignora la señal de terminación. El -9 puede dejar datos inconsistentes o archivos incompletos.killall — Enviar Señales por Nombre de Proceso
El comando killall es útil para terminar todos los procesos que coinciden con un nombre de comando específico, sin necesidad de conocer sus PIDs.
killall gedit
killall -9 firefox
Ejemplo práctico con gedit (paso a paso)
sudo apt install gedit gedit archivo1.txt & gedit archivo2.txt & gedit archivo3.txt &
pgrep gedit
2341 2358 2372
killall gedit
pgrep gedit
(sin salida — no hay procesos gedit en ejecución)
[2]+ Terminado gedit archivo1.txt ← Notificación del shell
[2]+ Terminado gedit archivo1.txt no es la salida de pgrep, sino una notificación que Bash emite cuando detecta que un trabajo en segundo plano ha finalizado.nice — Ejecutar con Prioridad Modificada
El comando nice inicia un nuevo proceso con una prioridad diferente a la predeterminada. La prioridad se mide con el valor niceness.
- -20: Máxima prioridad (menos "nice" con el resto del sistema). Requiere root.
- 0: Prioridad por defecto para procesos de usuario.
- 19: Mínima prioridad — solo usa CPU cuando nadie más la necesita.
- Sin sudo: Un usuario regular solo puede aumentar el valor (bajar prioridad), no reducirlo por debajo de 0.
Ejemplo — Backup con baja prioridad
# El proceso tar solo usará CPU cuando otros procesos lo permitan
nice -n 15 tar -czf /tmp/backup_jose.tar.gz /home/jose/Documentos
# Ejecutar script Python con baja prioridad
nice -n 10 python3 /home/jose/script_lento.py
renice — Cambiar Prioridad de un Proceso en Ejecución
A diferencia de nice, que actúa al lanzar un proceso, renice modifica el valor de niceness de un proceso que ya está en marcha.
sleep 3600 & # [1] 12347 renice 10 -p 12347 # Bajar la prioridad del proceso
12347 (process ID) old priority 0, new priority 10
sudo renice -n 5 -p 1234
xargs — Construir y Ejecutar Líneas de Comandos
El comando xargs toma la salida estándar de otro comando (generalmente via pipe |) y la utiliza para construir y ejecutar líneas de comando. Es esencial para trabajar con grandes listas de archivos.
Opciones principales
| Opción | Descripción |
|---|---|
| -I {} | Define un marcador de posición {} para insertar cada línea de entrada en una posición específica del comando. |
| -p | Pide confirmación antes de ejecutar cada comando (modo interactivo seguro). |
| -0 | Usar junto con find -print0 para manejar nombres de archivo con espacios o caracteres especiales. |
Ejemplo — Eliminar archivos .bak encontrados por find
touch /home/jose/config.bak echo "Contenido de backup" > /home/jose/doc_viejo.bak
ls /home/jose/*.bak
/home/jose/config.bak /home/jose/doc_viejo.bak
find /home/jose -name "*.bak" | xargs rm
find genera la lista de archivos → | envía esa lista a xargs → xargs ejecuta rm con cada archivo como argumento. Es equivalente a rm /home/jose/config.bak /home/jose/doc_viejo.bak.Ejemplo — Copia interactiva y segura con -print0
# -print0 y -0 manejan correctamente nombres con espacios # -I {} inserta el nombre del archivo donde está {} # -p pide confirmación antes de cada copia find . -name "*.png" -print0 | xargs -0 -I {} -p cp {} /tmp/imagenes_jose
cp ./foto1.png /tmp/imagenes_jose? ...y/n/...
Más ejemplos prácticos
# Contar líneas de todos los .txt find /home/jose/ -name "*.txt" | xargs wc -l # Eliminar logs antiguos find /home/jose/temp -name "*.log" | xargs rm # Abrir los 3 primeros PDFs encontrados locate "*.pdf" | head -n 3 | xargs xdg-open
Referencia Rápida — Índice de Comandos
| Comando | Sintaxis básica | Uso típico |
|---|---|---|
| ps aux | ps aux | grep usuario | Ver todos los procesos del sistema |
| ps ef | ps ef | Ver árbol jerárquico de procesos |
| top | top -u jose | Monitor en tiempo real filtrado por usuario |
| htop | htop | Monitor visual interactivo |
| jobs | jobs | Listar trabajos de la sesión actual |
| fg %N | fg %2 | Traer trabajo N al primer plano |
| bg %N | bg %1 | Reanudar trabajo N en segundo plano |
| kill PID | kill 12345 | SIGTERM — terminación elegante |
| kill -9 PID | kill -9 12345 | SIGKILL — terminación forzada |
| killall nombre | killall firefox | Terminar todos los procesos por nombre |
| nice -n N cmd | nice -n 15 tar -czf ... | Iniciar proceso con prioridad reducida |
| renice N -p PID | renice 10 -p 12347 | Cambiar prioridad de proceso en marcha |
| xargs | find ... | xargs rm | Ejecutar comandos con lista de argumentos |
Ejercicio Práctico Final
Flujo completo que cubre monitoreo, gestión de trabajos, señalización y prioridad de procesos.
ps aux | grep python
nice -n 15 python3 largo.py &
jobs
fg %1
# Encontrar el PID primero ps aux | grep python # Terminar elegantemente kill 12345 # Si no responde, forzar kill -9 12345
find /home/jose/temp -name "*.log" | xargs rm