saber - terminar proceso en terminal linux
¿Cómo puedo matar un proceso por nombre en lugar de PID? (17)
El comando kill
predeterminado acepta nombres de comando como una alternativa al PID. Ver matar (1) . Un problema frecuente es que bash
proporciona su propia kill
que acepta números de trabajo, como kill %1
, pero no nombres de comando. Esto dificulta el comando por defecto. Si la funcionalidad anterior es más útil para usted que la última, puede desactivar la versión de bash
llamando
enable -n kill
Para más información, vea kill
y enable
entradas en bash (1) .
Por ejemplo, a veces cuando intento iniciar Firefox dice que ya se está ejecutando un proceso de Firefox. Así que tengo que hacer esto:
jeremy@jeremy-desktop:~$ ps aux | grep firefox
jeremy 7451 25.0 27.4 170536 65680 ? Sl 22:39 1:18 /usr/lib/firefox-3.0.1/firefox
jeremy 7578 0.0 0.3 3004 768 pts/0 S+ 22:44 0:00 grep firefox
jeremy@jeremy-desktop:~$ kill 7451
Lo que me gustaría es un comando que haría todo eso por mí. Tomaría una cadena de entrada y grep para ella (o lo que sea) en la lista de procesos, y eliminaría todos los procesos en la salida:
jeremy@jeremy-desktop:~$ killbyname firefox
Intenté hacerlo en PHP, pero exec (''ps aux'') parece mostrar solo los procesos que se han ejecutado con exec () en el propio script PHP (por lo que el único proceso que muestra es el mismo).
En Mac no pude encontrar el pgrep y pkill tampoco funcionaba killall, así que escribí un sencillo guión de una línea:
export pid=`ps | grep process_name | awk ''NR==1{print $1}'' | cut -d'' '' -f1`;kill $pid
Si hay una forma más fácil de hacerlo, por favor, comparta.
Es extraño, pero no he visto una solución como esta:
kill -9 `pidof firefox`
También puede matar múltiples procesos (múltiples pids) como:
kill -9 `pgrep firefox`
Prefiero pidof
ya que tiene salida de una sola línea:
> pgrep firefox
6316
6565
> pidof firefox
6565 6316
La forma más fácil de hacerlo es primero comprobar que está obteniendo los ID de proceso correctos con:
pgrep -f [part_of_a_command]
Si el resultado es el esperado. Ir con:
pkill -f [part_of_a_command]
Me preguntaba lo mismo, pero el problema con las respuestas actuales es que no verifican de forma segura los procesos que deben eliminarse, por lo que ... podría provocar errores terribles:) ... especialmente si varios procesos coinciden con el patrón .
Como un descargo de responsabilidad, no soy un profesional y ciertamente hay espacio para mejorar.
Así que escribí un pequeño script sh:
#!/bin/sh
killables=$(ps aux | grep $1 | grep -v mykill | grep -v grep)
if [ ! "${killables}" = "" ]
then
echo "You are going to kill some process:"
echo "${killables}"
else
echo "No process with the pattern $1 found."
return
fi
echo -n "Is it ok?(Y/N)"
read input
if [ "$input" = "Y" ]
then
for pid in $(echo "${killables}" | awk ''{print $2}'')
do
echo killing $pid "..."
kill $pid
echo $pid killed
done
fi
Normalmente uso el comando killall, vea aquí para más detalles.
Para matar con grep:
kill -9 `pgrep myprocess`
Puedes matar procesos por nombre con killall <name>
killall envía una señal a todos los procesos que ejecutan cualquiera de los comandos especificados. Si no se especifica ningún nombre de señal, se envía SIGTERM.
Las señales se pueden especificar por nombre (por ejemplo, -HUP o -SIGHUP ) o por número (por ejemplo, -1 ) o por opción -s .
Si el nombre del comando no es una expresión regular (opción -r ) y contiene una barra (/), los procesos que ejecutan ese archivo en particular se seleccionarán para eliminar, independientemente de su nombre.
Pero si no ve el proceso con ps aux
, probablemente no tenga derecho a matarlo ...
Si ejecuta GNOME, puede usar el monitor del sistema (Sistema-> Administración-> Monitor del sistema) para detener los procesos como lo haría en Windows. KDE tendrá algo similar.
También es posible utilizar:
pkill -f "Process name"
.
Para mi funcionó perfecto, era lo que buscaba. En mi caso sin bandera pkill no funcionó con nombre.
Cuando se establece -f
, la línea de comando completa se usa para la coincidencia de patrones.
Una alternativa un poco más larga:
kill `pidof firefox`
Utilizando el comando #killall
:
#killall -9 <processname>
kill -9 $ (ps aux | grep -e myprocessname | awk ''{print $ 2}'')
más correcto sería:
export pid=`ps aux | grep process_name | awk ''NR==1{print $2}'' | cut -d'' '' -f1`;kill -9 $pid
Mata todos los procesos que tengan snippet
en la ruta de inicio. Puede eliminar todas las aplicaciones iniciadas desde algún directorio al poner / directory / como un fragmento. Esto es bastante útil cuando inicia varios componentes para la misma aplicación desde el mismo directorio de aplicaciones.
ps ax | grep <snippet> | grep -v grep | awk ''{print $1}'' | xargs kill
ps aux | grep processname | cut -d'' '' -f7 | xargs kill -9 $
pkill firefox
Más información: http://linux.about.com/library/cmd/blcmdl1_pkill.htm