Comment puis-je tuer la dernière tâche d'arrière-plan générée sous Linux?
Exemple:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
Comment puis-je tuer la dernière tâche d'arrière-plan générée sous Linux?
Exemple:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
Réponses:
Il y a une variable spéciale pour cela dans bash:
kill $!
$! se développe en PID du dernier processus exécuté en arrière-plan.
^Z
ne crée pas d'arrière-plan, il les arrête. Un suivant bg
fait le «backgrounding» réel (reprend l'exécution en arrière-plan), et après cela $!
fonctionne comme prévu.
????
stands représentent une ou plusieurs commandes à exécuter après la mise à mort, si l'une de ces commandes repose sur le travail effectué par le processus d'arrière-plan, soyez attentif à toutes les tâches de nettoyage ou de finition que le processus d'arrière-plan pourrait effectuer dans un gestionnaire de signaux après recevoir un signal (captable). Il est préférable d'ajouter un wait
(suivi peut-être d'un sync
ou même d'un sleep <n>
) juste avant la première de ces commandes «dépendantes».
Vous pouvez tuer par numéro de travail. Lorsque vous mettez une tâche en arrière-plan, vous verrez quelque chose comme:
$ ./script &
[1] 35341
C'est [1]
le numéro de la tâche et peut être référencé comme:
$ kill %1
$ kill %% # Most recent background job
Pour voir une liste des numéros de tâche, utilisez la jobs
commande. Plus de man bash
:
Il existe plusieurs façons de faire référence à un travail dans le shell. Le personnage
%
introduit un nom de travail. Le numéro de posten
peut être appelé%n
. Un travail peut également être référencé 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 à unce
travail arrêté . Si un préfixe correspond à plusieurs travaux, bash signale une erreur. L'utilisation%?ce
, d'autre part, 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%+
se référer à la notion du shell du travail en cours, qui est le dernier travail arrêté alors qu'il était au premier plan ou démarré en arrière-plan. Le travail précédent peut être référencé à l'aide de%-
. Dans la sortie relative 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 tâche associée) fait également référence à la tâche actuelle.
set -m
), il est destiné à une utilisation interactive. Voir stackoverflow.com/questions/690266/... aussi bien
%1
- ci et %%
- surtout. Certaines choses ne meurent pas en Ctrl-C, vous devez donc les Ctrl-Z, puis kill -9 %%
. Un exemple où je l'ai trouvé utile est: while true; do mplayer <some unstable online radio>; date >> restarts.log; done
- Ctrl-C vous amènera simplement à la prochaine itération de la boucle. Avant je devais faire ps
ou peut jobs -l
- être , puis retaper le PID, ce qui est fastidieux.
while true
par while sleep 1
. Cela vous donnera un court délai avant de redémarrer si vous pouvez vivre avec cela, et si vous appuyez deux fois sur ctrl-c, le second interrompra le sommeil, le terminant par une sortie non nulle et sortant de la boucle.
Cela devrait tuer tous les processus d'arrière-plan:
jobs -p | xargs kill -9
kill -9 %%
c'est moins en tapant :)
c'est une réponse hors sujet, mais, pour ceux qui sont intéressés, elle peut être utile.
Comme dans la réponse de @John Kugelman,% est lié à la spécification du poste. comment trouver cela efficacement? utilisez moins la commande & pattern , l'homme semble utiliser moins de téléavertisseur (pas si sûr), dans man bash tapez &% puis tapez Enter n'affichera que les lignes contenant '%', pour tout afficher, tapez &. puis entrez.
Utilisez simplement la commande killall:
nom de tâche killall
pour plus d'informations et des options plus avancées, tapez "man killall".
killall python
ou killall java
, tout en ayant quelque chose d'utile en cours d'exécution ailleurs dans le système.