¿Cómo seleccionar un valor PID específico si más de un proceso tiene un número PID similar?

¿Cómo seleccionar un valor PID específico si más de un proceso tiene un número PID similar?

Estoy usando RHEL 7.5 y tengo un programa Java que incluye un archivo con el número PID. Si el proceso se mata, el archivo todavía existe y estoy haciendo un script para validar si el PID que está almacenado en ese archivo está vivo o no, pero tengo una duda o un problema.

El PID 445 existe y el 2445 existe. Entonces, ¿cómo puedo obtener sólo el 445?

Lo intenté con el siguiente comando:

ps -ax | egrep "^ 445"

Pero no devolvió nada.

Los dos procesos:

ps -ax | grep -v grep | egrep "445"

  445 pts/2    Sl     3:50 /opt/
 2445 ?        S      0:00 dbus-launch

Respuesta1

Usar -p:

-p proclist
Escriba información para procesos cuyos números de identificación de proceso se proporcionan en proclist. […]

(fuente)

En tu caso:

ps -p 445

POSIX dice psque debería devolver un estado de salida positivo si "ocurrió un error". Cada uno de pslos que probé considera proclistque no contiene al menos un PID de unexistenteproceso como "erróneo". Esto es útil. Ejemplo:

ps -p 445 >/dev/null && echo "Process exists."

Notas:

Respuesta2

Puede verificar si un proceso se está ejecutando en scripts Bash usando kill -0así:

if [ -f ${pid_file} ] && kill -0 $(cat ${pid_file}) 2>/dev/null; then
  exit
else
  rm -rf ${pid_file}
  exit
fi

Equivale ${pid_file}a la ruta del archivo con el PID. Comprueba -f ${pid_file}si el archivo PID existe. Luego kill -0 $(cat ${pid_file})comprueba si el proceso se está ejecutando.

Lo que se reduce a:

  • Si el proceso se está ejecutando, no haga más que salir del script.
  • De lo contrario (si el proceso esnoejecutándose, simplemente elimine el archivo PID.

La magia del kill -0se explica en la página de manual dekill:

Sifirmares 0, entonces no se envía ninguna señal, pero aún se realiza la verificación de errores; esto se puede utilizar para comprobar la existencia de un ID de proceso o un ID de grupo de procesos.

información relacionada