¿Cómo encontrar el ID de proceso (PID) de un programa de terminal en ejecución?

89

Estoy ejecutando un programa en el terminal del que no puedo escapar con Ctrl - C y que quiero matar. ¿Cómo puedo encontrar su PID?

    
pregunta Jjed 25.08.2012 - 17:00

8 respuestas

105

Abra otro terminal y ejecute ps ax | grep foo donde foo es el nombre del programa que no responde. Esto debería devolver una línea de salida que se parece a esto:

$ ps ax | grep firefox
2222 ?        S      0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox
2231 ?        Sl   514:36 /usr/lib/firefox-3.6.9/firefox-bin
30290 pts/2    S+     0:00 grep --color=auto firefox

El primer campo de cada línea de salida es un número que representa el Id. de proceso del programa emparejado por grep (puede ignorar con seguridad el último, que representa grep en sí.

Para detener el proceso ofensivo, haz lo siguiente: kill pid donde pid es la identificación del proceso del programa. Puede que tenga que usar su juicio sobre cuál de las coincidencias debe ser kill ed, o podría usar top en su lugar. El uso de kill por sí mismo envía SIGTERM, que debes probar primero, ya que permite que el programa limpie adecuadamente después de sí mismo. Si SIGTERM falla, intente con SIGHUP, que es un medicamento más activo: kill -HUP pid . Si todo lo demás falla, envíe SIGKILL. Pero, solo debe hacerlo como último recurso, porque SIGKILL hace que el kernel finalice el proceso inmediatamente sin posibilidad de limpieza. Esto a veces puede ocasionar daños en los datos u otros problemas. Entonces, de nuevo, solo envíe SIGKILL como último recurso. Para hacerlo, haz kill -KILL pid o kill -9 pid .

Si está ejecutando una interfaz gráfica, por supuesto, no tiene que engañar con esta loca línea de comandos para hacer el trabajo. Simplemente abra "Monitor del sistema", vaya a la pestaña Procesos, elija el proceso que desea detener (Hm, ¿podría ser el que usa 90% de CPU?) Y haga clic con el botón derecho. Como el proceso ya está detenido, (ese es el problema, ¿no?) Elija Terminar proceso o Eliminar proceso en el menú resultante.

  

Gracias a koanhead

    
respondido por el Jjed 13.04.2017 - 14:24
34

No creo que haya necesidad de comandos tan largos cuando puede realizar los mismos comandos con pgrep, pkill, pidof, etc ...

  • Para obtener el pid de un Running-Program

pgrep:

   pgrep [options] pattern

DESCRIPCIÓN:     pgrep examina los procesos actualmente en ejecución y enumera los identificadores de proceso que coinciden con los criterios de selección para stdout. Todos los criterios tienen que coincidir. Por ejemplo,

  • Para buscar el proceso llamado sshd, propiedad de root.

    $ pgrep -u root sshd
    
  • Enumere los procesos propiedad de root O daemon.

    $ pgrep -u root,daemon
    

pidof:

DESCRIPCIÓN :

Pidof encuentra los identificadores del proceso (pids) de los programas nombrados. Imprime esos identificadores en la salida estándar.

sintaxis:        pidof nombre_programa

  • Para matar un programa por pid use pkill ejemplo:

    pkill pid    
    pkill -f process_name    
    pkill -o process_name    
    pkill -n process_name    
    pkill -l process_name
    

    -f flag: busca el nombre_proceso (ver man pkill)
    -o marca: selecciona solo el más antiguo de los procesos coincidentes.
    -n marca: selecciona solo el más nuevo de los procesos coincidentes.
    -l flag: enumera el nombre del proceso así como también el ID del proceso.

respondido por el Prabhat Kumar Singh 16.06.2014 - 11:07
16

La forma más fácil de conocer el pid de un programa en ejecución es usando:

pidof <application name>

Por ejemplo, si comenzó vim y quiere saber su pid:

pidof vim

Recuerde que deberá proporcionar el nombre exacto del programa que se ha iniciado.

Por ejemplo, si está ejecutando vi y ejecuta pidof vim , no obtendrá los resultados correctos.

Consulte la página de manual de pidof para obtener más información.

    
respondido por el jobin 16.06.2014 - 11:28
13

He encontrado que es agradable usar una búsqueda que no distinga entre mayúsculas y minúsculas añadiendo "-i" y usando "aux" en lugar de "ax" para obtener un resultado más descriptivo:

ps aux | grep -i firefox

Si desea eliminar todos los procesos, puede usar:

ps aux | grep -i firefox | awk {'print '} | xargs kill -9

Eso es una muerte contundente. Suelta el "-9" si quieres una muerte suave.

    
respondido por el John Foley 24.12.2013 - 17:45
3

Si solo quiere el pid (útil para autokill scripts, etc ...)

pgrep -f desired_program_name
    
respondido por el MikeL 10.01.2017 - 14:29
0

También puede abrir otro terminal (o cambiar a otro tty) y ejecutar top , que es básicamente una versión de texto del Monitor del sistema. La primera columna enumera el PID de cada proceso en ejecución, que puede eliminar presionando K , ingresando el PID y luego ingresando una señal numérica para enviar.

    
respondido por el Waldir Leoncio 16.06.2014 - 13:01
0

Podrías hacer:

ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9

los primeros dos tubos obtienen información del proceso, luego tratamos de obtener la columna PID usando el corte de la vieja escuela y luego damos el PID resultante para matar.

    
respondido por el Arian Soltani 27.09.2016 - 23:09
0

Para los que ejecutan Ubuntu 16.04 LTS, debes usar ps ax y no solo ps en la línea de comandos, de lo contrario, obtendrás los procesos de desove la instancia de terminal particular en la que se encuentra. (generalmente solo 'bash' [el shell en el que se encuentra] y 'ps' [lo que acaba de ejecutar])

    
respondido por el cygnus_x1 10.09.2017 - 16:30

Lea otras preguntas en las etiquetas