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 salidaModo 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
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?
- Eficiencia: pgrep consulta directamente la información de los procesos del kernel, es más eficiente que ps | grep
- Seguridad: pgrep no coincide con su propio proceso, mientras que ps | grep puede coincidir con el propio proceso grep
- 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:
- Error ortográfico en el nombre del proceso
- No usar
-fopción para coincidir con la línea de comandos completa - El proceso pertenece a otro usuario y no tienes permisos suficientes para verlo
- 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
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
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
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:
- Localizar procesos específicos de forma rápida y precisa
- Escribir scripts de administración del sistema más fiables
- 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.
Otras extensiones