J'ai commencé
while true; do yad; sleep 60; done &
et fermé le terminal pour le tester, maintenant j'ai le même problème.
Si vous avez déjà fermé le terminal, vous avez commencé la boucle
Voyons un aperçu des processus en cours d'exécution ps fjx
, les dernières lignes de ma machine sont lues
2226 11606 11606 19337 ? -1 S 1000 0:00 \_ /bin/bash
11606 22485 11606 19337 ? -1 S 1000 0:00 | \_ sleep 10
2226 9411 9411 8383 ? -1 S 1000 0:00 \_ /bin/bash
9411 17674 9411 8383 ? -1 Sl 1000 0:00 \_ yad
1 2215 2215 2215 ? -1 Ss 1000 0:00 /lib/systemd/systemd --user
2215 2216 2215 2215 ? -1 S 1000 0:00 \_ (sd-pam)
Vous pouvez voir yad
comme un sous-processus de /bin/bash
, si je ferme, yad
il se transforme sleep 60
en sortie de ps
. Si l'arborescence est trop confuse, vous pouvez également rechercher la sortie comme suit 1 :
ps fjx | grep "[y]ad" # or respectively
ps fjx | grep "[s]leep 60"
Les lignes de sortie commencent par deux nombres, le premier étant le PPID, l'ID de processus du processus parent et le second étant le PID, l'ID du processus lui-même. C'est à cause de cela qui 9411
apparaît dans les deux lignes ici:
2226 9411 9411 8383 ? -1 S 1000 0:00 \_ /bin/bash
9411 17674 9411 8383 ? -1 Sl 1000 0:00 \_ yad
C'est le bash
sous - shell que nous voulons tuer et nous venons de découvrir son PID, alors maintenant tout ce qui reste est simple
kill 9411 # replace 9411 with the PID you found out!
et le sous-shell ennuyeux a disparu pour de bon.
1 : La notation au grep "[y]ad"
lieu d' grep yad
empêcher simplement le grep
processus lui-même de s'afficher dans la liste des résultats.
Si le terminal est toujours ouvert
bash
fournit la variable $!
, qui «s'étend à l'ID de processus du travail le plus récemment placé en arrière-plan», de sorte que ce qui suit tue simplement le dernier processus en arrière-plan:
kill $!
Si ce n'est pas le dernier processus, vous pouvez simplement obtenir une liste des travaux en cours d'exécution avec la jobs
sortie intégrée, par exemple:
[1]- Running while true; do
yad; sleep 60;
done &
[2]+ Stopped sleep 10
Il y a deux jobs dans la liste des jobs, pour en tuer un, vous pouvez y accéder avec le numéro de job ou les raccourcis %
, %+
("job actuel") et %-
("job précédent"), par exemple pour tuer la boucle qui s'exécute en arrière-plan pourrait faire
kill %1 # or
kill %-
et pour tuer le sleep 10
travail suspendu :
kill %2 # or
kill %+ # or
kill %
top
pour arrêter le processus en appuyant surk
, puis en entrant le PID, puis en appuyant deux fois sur entrée.Le
&
fera le terminal créer un nouveau processus et obtenir votre code à exécuter à l' intérieur. Ainsi, votre code devient indépendant du processus terminal. Même si vous fermez le terminal, le nouveau processus dans lequel votre code s'exécute ne s'arrêtera pas. Donc, supprimez&
ou faitesps -aux
, localisez votre processus et tuez-lekill (process id)
.la source
Généralement bg pour le fond fg pour le premier plan. Si vous utilisez & symbol use fg, il affichera le programme en cours d'exécution. Appuyez sur Ctrl + C pour tuer.
la source
bg
/fg
ne fonctionnera pas une fois le terminal détachébash
. Serait incapable de rattacher à l'aide dereptyr
carbash
a des processus enfants (sleep
).