Estoy ejecutando un programa en la terminal con el que no puedo escapar Ctrl-C y que quiero matar. ¿Cómo puedo encontrar su PID?
Abra otra 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 firefox2222 ? S 0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox2231 ? Sl 514:36 /usr/lib/firefox-3.6.9/firefox-bin30290 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 que coincide con grep
(puede ignorar con seguridad el último, que representa grep
mismo.
Para detener el proceso de ofensa, haga lo siguiente:kill pid
donde pid es el ID de proceso del programa. Es posible que tenga que usar su juicio sobre cuál de las coincidencias debe ser kill
ed, o podrías usar top
en su lugar. Utilizar kill
por sí mismo envía SIGTERM, que debe probar primero, ya que permite que el programa se limpie adecuadamente después de sí mismo. Si SIGTERM falla, pruebe SIGHUP, que es un medicamento más fuerte: 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 de inmediato sin posibilidad de limpieza. Esto a veces puede resultar en corrupción de datos u otros problemas. Así que, de nuevo, solo envíe SIGKILL como último recurso. Para hacerlo, haga kill -KILL pid
o kill -9 pid
.
Si está ejecutando una interfaz gráfica, por supuesto, no tiene que engañar con estas locas cosas de la línea de comandos para hacer el trabajo. Simplemente abra "Monitor del sistema", navegue hasta la pestaña Procesos, elija el proceso que desea detener (Hm, ¿podría ser el que usa el 90% de la CPU?) y haga clic con el botón derecho en él. Como el proceso ya está detenido, (ese es el problema, ¿verdad?) elija Finalizar proceso o Eliminar proceso en el menú resultante.
Crédito a cabeza de gallo
No creo que haya necesidad de comandos tan largos cuando se pueden realizar los mismos comandos con pgrep, pkill, pidof, etc...
- Para obtener el PID de un programa en ejecución
pgrep:
pgrep [options] pattern
descripción : pgrep examina los procesos que se están ejecutando actualmente y enumera los ID de proceso que coinciden con los criterios de selección de stdout. Todos los criterios tienen que coincidir. Por ejemplo,
-
Para encontrar el proceso denominado sshd propiedad de root.
$ pgrep -u root sshd
-
Enumere los procesos que son propiedad de root O daemon.
$ pgrep -u root,daemon
pidof:
descripción:
Pidof busca los ID de proceso (PID) de los programas nombrados. Imprime esas identificaciones en la salida estándar.
sintaxis: pidof nombre_de_programa
-
Para matar un programa por pid, use pkillexample:
pkill pid pkill -f process_name pkill -o process_name pkill -n process_name pkill -l process_name
-f
bandera: Busca el process_name (ver man pkill)-o
bandera: Seleccione solo el más antiguo de los procesos coincidentes.-n
bandera: Seleccione solo el más reciente de los procesos coincidentes.-l
bandera: Lista el nombre del proceso, así como el ID del proceso.
La forma más fácil de conocer el PID de un programa en ejecución es usar:
pidof <application name>
Por ejemplo, si inició vim y desea conocer su pid:
pidof vim
Recuerde que deberá proporcionar el nombre exacto del programa que se inició.
Por ejemplo, si está ejecutando vi y ejecuta pidof vim
no obtendrás resultados correctos.
Referir pidof
para obtener más información, consulte la página de manual.
He descubierto que es bueno usar una búsqueda que no distinga entre mayúsculas y minúsculas agregando la "- 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 que puede usar:
ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9
Es una muerte forzada. Suelta el " -9 " si quieres una muerte suave.
Si solo desea el pid (útil para scripts de autocompletar, etc...)
pgrep -f desired_program_name
Para aquellos que ejecutan Ubuntu 16.04 LTS, usted deber utilizar ps ax
y no solo ps
en la línea de comandos, de lo contrario, solo obtendrá los procesos que se generan desde la instancia de terminal en particular en la que se encuentra. (por lo general, solo 'bash' [el shell en el que se encuentra] y ' ps ' [lo que acaba de ejecutar])
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.
Usted podría hacer:
ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9
las dos primeras tuberías obtienen la información del proceso, luego intentamos obtener la columna PID utilizando el corte de la vieja escuela y luego le damos al PID resultante para matar.
top
o
screen -list|ls
lista de todos los PID con el proceso correspondiente
kill -[pid]
Esta es una rama de [¿Qué debo hacer cuando Ubuntu se congela?] (performance - What should I do when Ubuntu freezes? - Ask Ubuntu) como referencia para evitar que los detalles de esa pregunta se vuelvan demasiado técnicos.
Hay un comando * pidof*.