Comando pgrep de Linux

Referencia completa de comandos de Linux


pgrep es una herramienta de búsqueda de procesos muy útil en el sistema Linux. Es parte del paquete de software procps o procps-ng. El nombre de este comando proviene de "process grep", como su nombre indica, puede buscar procesos en el sistema de la misma manera que el comando grep busca texto.

La función principal de pgrep es encontrar procesos en ejecución según las condiciones dadas y devolver el PID (ID de proceso) de estos procesos. En comparación con la forma tradicional de combinar el comando ps con grep, pgrep es más simple y eficiente.


Sintaxis básica de pgrep

El formato de sintaxis básica del comando pgrep es el siguiente:

pgrep [选项] [匹配模式]

Donde:

  • Opciones: varios parámetros utilizados para especificar las condiciones de búsqueda o el formato de salida
  • Modo de coincidencia: patrón de expresión regular para hacer coincidir el nombre del proceso

Opciones y parámetros comunes

pgrep proporciona múltiples opciones para controlar con precisión el comportamiento de búsqueda. Las siguientes son las opciones comunes:

Opción Descripción
-l Muestra simultáneamente el nombre del proceso y el PID
-a Muestra la línea de comandos completa, no solo el nombre del proceso
-f Coincide con la línea de comandos completa (incluidos los argumentos), no solo con el nombre del proceso
-u Solo coincide con los procesos propiedad del usuario especificado
-x Coincide exactamente con todo el nombre del proceso
-n Solo muestra el proceso coincidente más reciente (iniciado más recientemente)
-o Solo muestra el proceso coincidente más antiguo (iniciado primero)
-c Solo devuelve el número de procesos coincidentes sin mostrar el PID
-d Especifica el delimitador de salida (por defecto es un salto de línea)
-P Solo coincide con los procesos hijos del ID de proceso padre especificado
-g Solo coincide con los procesos del ID de grupo de procesos especificado
-t Solo coincide con los procesos de la terminal (tty) especificada

Ejemplos de uso

Búsqueda básica de procesos

Buscar todos los procesos llamados "nginx":

pgrep nginx

Este comando devolverá los ID de todos los procesos cuyos nombres contengan "nginx".

Mostrar nombre del proceso

Buscar procesos "ssh" y mostrar el nombre del proceso:

pgrep -l ssh

Ejemplo de salida:

1234 sshd
5678 ssh-agent

Coincidencia exacta del nombre del proceso

Solo coincide con procesos que se llaman exactamente "bash" (no incluye "bashrc", etc.):

pgrep -x bash

Coincidir con la línea de comandos completa

Buscar procesos que contengan argumentos específicos, por ejemplo, buscar procesos sshd que usen un puerto específico:

pgrep -f "sshd -p 2222"

Filtrar por usuario

Buscar todos los procesos ejecutados por el usuario "www-data":

pgrep -u www-data

Búsqueda con condiciones combinadas

Buscar procesos llamados "mysqld" ejecutados por el usuario "mysql":

pgrep -u mysql mysqld

Contar número de procesos

Contar el número de procesos "chrome" en ejecución:

pgrep -c chrome

Buscar el proceso más reciente/más antiguo

Buscar el proceso "python" iniciado más recientemente:

pgrep -n python

Buscar el proceso "python" iniciado más antiguamente:

pgrep -o python

Uso avanzado

Usar junto con pkill

pgrep se usa a menudo junto con el comando pkill. Puede usar primero pgrep para ver los procesos que se van a terminar y, después de confirmar, usar pkill:

Ejemplo

# Primero ver los procesos coincidentes
pgrep -l apache2

# Terminar estos procesos después de confirmar
pkill apache2

Usar un delimitador personalizado

De forma predeterminada, pgrep usa un salto de línea para separar varios PID. Se puede cambiar para usar comas:

pgrep -d, nginx

Ejemplo de salida:

1234,5678,9012

Buscar procesos en una terminal específica

Buscar todos los procesos que se ejecutan en la terminal tty1:

pgrep -t tty1

Buscar procesos hijos

Buscar todos los procesos hijos del proceso con PID 1234:

pgrep -P 1234

Preguntas frecuentes

¿Cuál es la diferencia entre pgrep y ps | grep?

  1. Eficiencia: pgrep consulta directamente la información de los procesos del kernel, es más eficiente que ps | grep
  2. Seguridad: pgrep no coincide con su propio proceso, mientras que ps | grep puede coincidir con el propio proceso grep
  3. Funcionalidad: pgrep ofrece más opciones especializadas de búsqueda de procesos

¿Por qué a veces pgrep no encuentra procesos que sé que están en ejecución?

Posibles razones:

  1. Error ortográfico en el nombre del proceso
  2. No usar-fopción para coincidir con la línea de comandos completa
  3. El proceso pertenece a otro usuario y no tienes permisos suficientes para verlo
  4. El proceso ya ha terminado

¿Cómo ver la versión de pgrep?

pgrep -V

Escenarios de aplicación práctica

Monitorizar el estado de los servicios

Verificar si un servicio se está ejecutando en un script:

Ejemplo

if pgrep -x "nginx" >/dev/null; then
    echo "Nginx is running"
else
    echo "Nginx is not running"
fi

Operaciones por lotes en procesos

Obtener los PID de todos los procesos de Java y realizar operaciones:

Ejemplo

for pid in $(pgrep java); do
    echo "Processing Java process $pid"
    # Otras operaciones...
done

Monitorización de recursos del sistema

Contar el número de procesos de un tipo específico y su uso de recursos:

Ejemplo

count=$(pgrep -c chrome)
memory=$(ps -o rss= -p $(pgrep chrome) | awk '{sum+=$1} END {print sum}')
echo "Chrome processes: $count, Total memory: ${memory}KB"

Resumen

pgrep es una herramienta potente y eficiente en la administración del sistema Linux. Simplifica las operaciones de búsqueda y gestión de procesos. Al dominar las diversas opciones y usos de pgrep, puedes:

  1. Localizar procesos específicos de forma rápida y precisa
  2. Escribir scripts de administración del sistema más fiables
  3. Mejorar la eficiencia del trabajo de mantenimiento diario del sistema

Recuerda que, después de usar pgrep para buscar procesos, especialmente cuando se va a terminar un proceso, asegúrate primero de que el proceso encontrado sea el correcto, para evitar terminar servicios importantes por error.


Referencia completa de comandos de Linux

Otras extensiones