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
????
Author: Gilles, 2009-10-26

8 answers

Hay una variable especial para esto en bash:

kill $!

$! se expande al PID del último proceso ejecutado en segundo plano.

 203
Author: falstro,
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 trabajo n 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 detenido ce. 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 cadena ce 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.

 263
Author: John Kugelman,
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
 41
Author: Dave Vogt,
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
 22
Author: Prabhu Are,
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.

 2
Author: gte525u,
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.

 1
Author: jldupont,
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.

 0
Author: qeatzy,
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".

 -1
Author: zakk,
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