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
????
Il y a une variable spéciale pour cela dans bash:
kill $!
$! passe au PID du dernier processus exécuté en arrière-plan.
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 travailn
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înece
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.
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
Cela devrait tuer tous les processus en arrière-plan:
jobs -p | xargs kill -9
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é.
Vous avez besoin de son pid ... utilisez "ps -A" pour le trouver.
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.