Este artículo demuestra cómo determinar el PID de un programa en un sistema GNU/Linux.



Comúnmente se utiliza la herramienta ps para determinar el PID (process ID) de un programa en ejecución, por ejemplo:

root@hal9000:~# ps aux | grep '[n]tpd'
ntp       1820  0.0  0.0  78728  4016 ?        Ssl  07:19   0:01 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 111:115

O de forma más limpia con las opciones -eo pid,comm:

root@hal9000:~# ps -eo pid,comm | grep '[n]tpd'
 1820 ntpd

Sin embargo, existe el utilitario pidof, parte del paquete sysvinit-utils, que permite obtener el PID de un programa (siempre que el programa esté corriendo actualmente) de forma más elegante y simple:

root@hal9000:~# pidof ntpd
1820

El nombre de programa pasado como parámetro debe coincidir con lo que mostraría la columna "comm" en la salida de ps, tal como se observa en la salida anterior. De este modo es posible obtener el PID más fácil y rápidamente que utilizando ps.

pidof es parte del paquete sysvinit-utils, el cual suele venir incluido en todas las distribuciones basadas en Debian, más allá de que se utilice SystemV o systemd como gestor de inicio.

Por otro lado, pidof es un simple enlace simbólico al utilitario killall5 (no confundir con killall), el cual es la versión de "killall" de SystemV. Este funciona para enviar señales a múltiples procesos y cambia su funcionamiento de acuerdo al nombre con el cual es llamado. Por ende, al ser invocado como "pidof", simplemente muestra el PID del programa pasado como parámetro.

Si existen múltiples instancias de un mismo programa, muestra una lista de PIDs:

emi@hal9000:~$ pidof firefox-esr
2996 2835 2701 2693 2684 2665 2657 2629 2626 2577 2516

Si se desea obtener sólo uno, utilizar la opción -s:

emi@hal9000:~$ pidof -s firefox-esr
2996

Otra opción interesante es -q, la cual permite omitir toda salida y simplemente salir con el código de retorno 0 (ok) o 1 (error) indicando si hay o no procesos en ejecución que coincidan con el nombre pasado como parámetro. Por ejemplo, existe en ejecución al menos una instancia de "firefox-esr" pero ninguna de un programa inexistente "asdf":

emi@hal9000:~$ pidof -q firefox-esr
emi@hal9000:~$ echo $?
0
emi@hal9000:~$ pidof -q asdf
emi@hal9000:~$ echo $?
1

Para más información, consultar las siguientes páginas de manual:

man pidof
man killall5


Tal vez pueda interesarte


Compartí este artículo