macos - procesos - ¿Cómo obtener el PID de un proceso dando el nombre del proceso en Mac OS X?
kill process mac terminal (8)
Estoy escribiendo un script para monitorear la CPU y el MEM de cualquier proceso dado. Para eso necesito enviar el nombre del proceso para ser monitoreado como un argumento de línea de comando. Por ejemplo.
./monitorscript <pname>
Necesito obtener el pid del proceso en el script para poder usar un ps -p <pid>
dentro.
¿Cómo obtengo el pid de un proceso dado su nombre de proceso?
Entiendo que puede haber múltiples procesos en el mismo nombre. Solo quiero sacar el primer proceso de esa lista.
¿Por qué no ejecuta TOP y usa las opciones para ordenar por otras métricas, que no sean PID? ¿Como el PID más usado de la CPU / MEM?
top -o cpu <--- ordena todos los procesos por CPU Uso
Esta solución coincide con el nombre del proceso más estrictamente:
ps -Ac -o pid,comm | awk ''/^ *[0-9]+ Dropbox$/ {print $1}''
Esta solución tiene las siguientes ventajas:
- ignora argumentos de línea de comandos como
tail -f ~/Dropbox
- ignora los procesos dentro de un directorio como
~/Dropbox/foo.sh
- ignora procesos con nombres como
~/DropboxUID.sh
Este es el comando más corto que pude encontrar que hace el trabajo:
ps -ax | awk ''/[t]he_app_name/{print $1}''
Poner corchetes alrededor de la primera letra evita que awk encuentre el proceso de awk.
La respuesta anterior era en su mayoría correcta, solo necesitaba algunos ajustes para los diferentes parámetros en Mac OSX.
ps -A | grep -m1 firefox | awk ''{print $1}''
Prueba este:
echo "$(ps -ceo pid=,comm= | awk ''/firefox/ { print $1; exit }'')"
El comando ps
produce un resultado como este, con el PID en la primera columna y el nombre ejecutable (solo) en la segunda columna:
bookworm% ps -ceo pid=,comm=
1 launchd
10 kextd
11 UserEventAgent
12 mDNSResponder
13 opendirectoryd
14 notifyd
15 configd
... que awk
procesa, imprime la primera columna (pid) y sale después de la primera coincidencia.
Puede instalar pidof
con Homebrew :
brew install pidof
pidof <process_name>
Puede usar el comando pgrep como en el siguiente ejemplo
$ pgrep Keychain/ Access
44186
Puedes intentar esto
pid=$(ps -o pid=,comm= | grep -m1 $procname | cut -d'' '' -f1)