web-dev-qa-db-fra.com

linux: tuer la tâche en arrière-plan

Comment puis-je tuer la dernière tâche en arrière-plan générée sous Linux?

Exemple:

doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
180
flybywire

Il y a une variable spéciale pour cela dans bash:

kill $!

$! passe au PID du dernier processus exécuté en arrière-plan.

220
falstro

Vous pouvez tuer par numéro de travail. Lorsque vous mettez une tâche en arrière-plan, vous voyez quelque chose comme:

$ ./script &
[1] 35341

Ce [1] est le numéro de travail et peut être référencé comme suit:

$ kill %1
$ kill %%  # Most recent background job

Pour voir une liste de numéros de travail, utilisez la commande jobs. Plus de man bash:

Il existe plusieurs façons de faire référence à un travail dans le shell. Le caractère % introduit un nom de travail. Le numéro de travail n peut être appelé %n. Vous pouvez également faire référence à un travail en utilisant un préfixe du nom utilisé pour le démarrer ou en utilisant une sous-chaîne qui apparaît dans sa ligne de commande. Par exemple, %ce fait référence à un travail arrêté ce. Si un préfixe correspond à plusieurs travaux, bash signale une erreur. L'utilisation de %?ce, quant à elle, fait référence à tout travail contenant la chaîne ce dans sa ligne de commande. Si la sous-chaîne correspond à plusieurs travaux, bash signale une erreur. Les symboles %% et %+ font référence à la notion de travail actuelle du shell, qui est le dernier travail arrêté lorsqu'il était au premier plan ou démarré à l'arrière-plan. Le travail précédent peut être référencé avec %-. Dans les sorties relatives aux travaux (par exemple, la sortie de la commande jobs), le travail en cours est toujours signalé par un + et le travail précédent par un -. Un seul % (sans spécification de travail associée) fait également référence au travail en cours.

280
John Kugelman

La commande suivante vous donne une liste de tous les processus d'arrière-plan de votre session, ainsi que le pid. Vous pouvez ensuite l'utiliser pour tuer le processus.

jobs -l

Exemple d'utilisation:

$ sleep 300 &
$ jobs -l
[1]+ 31139 Running                 sleep 300 &
$ kill 31139
44
Dave Vogt

Cela devrait tuer tous les processus en arrière-plan:

jobs -p | xargs kill -9
24
Prabhu Are
skill doB

skill est une version de la commande kill qui vous permet de sélectionner un ou plusieurs processus en fonction d'un critère donné.

2
gte525u

Vous avez besoin de son pid ... utilisez "ps -A" pour le trouver.

1
jldupont

c'est une réponse hors sujet, mais, pour ceux qui sont intéressés, c'est peut-être utile.

Comme dans la réponse de @John Kugelman,% est lié à la spécification du travail. comment trouver efficacement que? utilisez la commande less's & pattern, il semblerait que man utilisât moins de pagette (pas si sûr), dans man bash, &% alors le type Entrée affichera uniquement les lignes contenant '%', pour afficher à nouveau tous les types &. puis entrez.

0
qeatzy