¿Cómo puedo matar la última tarea de fondo engendrada en Linux?linux: matar a la tarea de fondo
Ejemplo:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
¿Cómo puedo matar la última tarea de fondo engendrada en Linux?linux: matar a la tarea de fondo
Ejemplo:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
Hay una variable especial para esto en bash:
kill $!
$! se expande al PID del último proceso ejecutado en segundo plano.
Esto no funciona para trabajos con '^ Z'. – polm23
@ polm23; no, '^ Z' no genera trabajos en segundo plano, los detiene. Un 'bg' posterior hace el 'fondo' real (reanuda la ejecución en el fondo), y después de eso' $! 'Funciona como se esperaba. – falstro
Suponiendo que el '' ???? representa uno o más comandos que se ejecutarán después de la matanza, si alguno de estos comandos se basa en el trabajo realizado por el proceso en segundo plano, ser conscientes de cualquier limpieza o tareas de acabado de maquillaje que el proceso en segundo plano podría funcionar en un controlador de señal después de recibir una señal (capturable). Lo mejor es agregar un 'wait' (seguido quizás por' sync' o incluso 'sleep
Es necesario utilizar su pid ... "ps -A" para encontrarlo.
sólo tiene que utilizar el comando killall:
killall TaskName
para obtener más información y opciones más avanzadas, tipo "hombre killall".
Creo que killall es un poco agresivo cuando realmente tiene fácil acceso al PID. Y peligroso, también, especialmente si eres root –
No es muy útil, si tienes que 'killall python' o' killall java', mientras tienes algo útil ejecutándose en otra parte del sistema. –
skill doB
skill
es una versión del comando kill que le permite seleccionar uno o varios procesos en base a un criterio dado.
Puede matar por número de trabajo. Cuando se pone una tarea en segundo plano verá algo como:
$ ./script &
[1] 35341
Eso [1]
es el número de trabajo y puede hacer referencia como:
$ kill %1
$ kill %% # Most recent background job
Para ver una lista de números de trabajo utilice el jobs
comando. Más de man bash
:
Hay una serie de formas de referirse a un trabajo en el shell. El carácter
%
introduce un nombre de trabajo. El número de trabajon
puede ser denominado%n
. También se puede hacer referencia a un trabajo utilizando un prefijo del nombre utilizado para iniciarlo, o utilizando una subcadena que aparece en su línea de comando. Por ejemplo,%ce
se refiere a un trabajo detenidoce
. Si un prefijo coincide con más de un trabajo, bash informa un error. El uso de%?ce
, por otro lado, se refiere a cualquier trabajo que contenga la cadenace
en su línea de comando. Si la subcadena coincide con más de un trabajo, bash informa de un error. Los símbolos%%
y%+
se refieren a la noción de shell del trabajo actual, que es el último trabajo detenido mientras estaba en primer plano o se inició en segundo plano. El trabajo anterior puede llamarse al usando%-
. En la salida correspondiente a trabajos (por ejemplo, la salida del comando de trabajos), el trabajo actual siempre es marcado con un+
, y el trabajo anterior con un-
. Un solo%
(sin ninguna especificación de trabajo adjunta) también se refiere al trabajo actual .
Para el registro, creo que esto solo funciona si el control de trabajo está habilitado. Aunque creo que puede activarlo en scripts ('set -m'), está destinado para uso interactivo. Ver http://stackoverflow.com/questions/690266/why-cant-i-use-job-control-in-a-bash-script así – falstro
símbolos muy útiles, estos '% 1' y' '%% - especialmente. Algunas cosas no mueren en Ctrl-C, por lo que necesita Ctrl-Z ellos, y luego 'matar -9 %%'. Un ejemplo en el que lo encontré útil es: 'mientras es verdadero; do mplayer
¿Hay uno para todos los trabajos? – CMCDragonkai
El siguiente comando le proporciona una lista de todos los procesos en segundo plano en su sesión, junto con el pid. Luego puede usarlo para matar el proceso.el uso
jobs -l
Ejemplo:
$ sleep 300 &
$ jobs -l
[1]+ 31139 Running sleep 300 &
$ kill 31139
Esto debe matar a todos los procesos en segundo plano:
jobs -p | xargs kill -9
Esto es lo que haría uso de antes, pero '' kill -9 %% es inferior a escribir :) –
@TomaszGandor que matará sólo el trabajo actual es decir, el último trabajo se detuvo en primer plano o en segundo plano comenzado. El comando en la respuesta matará TODOS los trabajos. – bitek
[no matar -9] (http://unix.stackexchange.com/questions/8916/when-should-i-not-kill-9-a-process) – lesmana
este es un fuera de tema respuesta, pero, para aquellos que estén interesados, podría ser valiosa .
Al igual que en la respuesta de @ John Kugelman,% está relacionado con la especificación de trabajo. ¿cómo encontrarlo de manera eficiente? use less & comando de patrón, parece que el hombre usa menos buscapersonas (no es seguro), en el tipo de hombre bash &% y luego escriba Entrar solo mostrará líneas que contengan '%', para volver a mostrar todo, escriba &. luego Entrar.
¿Cómo puede esto no estar relacionado con la programación? ¿La programación Bash no es programación? – flybywire
Pertenece al superusuario en mi humilde opinión. – Hasturkun
Esto está en la región de superposición entre SO y SU, pero creo que se ajusta mejor aquí en SO. Mi criterio para pensar de esta manera es que si @flybywire está haciendo esto en un script, es programación. Si solo quisiera hacerlo desde la línea de comando, diría que pertenece a la UB. –