linux: matar tarea de fondo
¿Cómo mato la última tarea en segundo plano generada en linux?
Ejemplo:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
8 answers
Hay una variable especial para esto en bash:
kill $!
$! se expande al PID del último proceso ejecutado en segundo plano.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-26 13:14:39
Puedes matar por número de trabajo. Cuando pones una tarea en segundo plano verás algo como:
$ ./script &
[1] 35341
Que [1]
es el número de trabajo y se puede hacer referencia como:
$ kill %1
$ kill %% # Most recent background job
Para ver una lista de números de trabajo use el comando jobs
. Más de man bash
:
Hay varias formas de referirse a un trabajo en el shell. El carácter
%
introduce un nombre de trabajo. Número de trabajon
puede ser denominado%n
. También se puede hacer referencia a un trabajo usando un prefijo del nombre utilizado para iniciarlo, o usando una subcadena que aparece en su línea de comandos. Por ejemplo,%ce
se refiere a un trabajo detenidoce
. Si un prefijo coincide con más de un trabajo, bash informa de un error. Usando%?ce
, por otro lado, se refiere a cualquier trabajo que contenga la cadenace
en su línea de comandos. Si el subcadena coincide con más de un trabajo, bash informa de un error. Los símbolos%%
y%+
se refieren a la noción del shell del trabajo actual, que es el último el trabajo se detuvo mientras estaba en primer plano o se inició en segundo plano. El trabajo anterior puede ser referenciado usando%-
. En la salida correspondiente a los trabajos (por ejemplo, la salida del comando jobs), el trabajo actual es siempre marque con un+
, y el trabajo anterior con un-
. Un único%
(sin especificación de trabajo adjunta) también se refiere a la trabajo actual.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-26 13:18:11
El siguiente comando le da una lista de todos los procesos en segundo plano en su sesión, junto con el pid. A continuación, se puede utilizar para matar el proceso.
jobs -l
Ejemplo de uso:
$ sleep 300 &
$ jobs -l
[1]+ 31139 Running sleep 300 &
$ kill 31139
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-26 13:18:59
Esto debería matar a todos los procesos en segundo plano:
jobs -p | xargs kill -9
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-20 05:38:38
skill doB
skill
es una versión del comando kill que le permite seleccionar uno o varios procesos en función de un criterio determinado.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-20 05:38:58
Necesitas su pid... usa "ps-A" para encontrarlo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-26 13:12:55
Esta es una respuesta fuera de tema, pero, para aquellos que están interesados, puede ser valiosa.
Como en la respuesta de @John Kugelman, % está relacionado con la especificación del trabajo. ¿cómo encontrar eso de manera eficiente? use less's & pattern command, parece que man usa menos buscapersonas (no tan seguro), en man bash type &% luego type Enter solo mostrará las líneas que contienen '%', para volver a mostrar todo, escriba &. entonces Entra.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-10 02:24:58
Simplemente use el comando killall:
Killall taskname
Para obtener más información y opciones más avanzadas, escriba "man killall".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-26 13:14:28