Je reçois le message There are stopped jobs.
lorsque j'essaie parfois de sortir d'un shell bash. Voici un scénario reproductible dans Python 2.x:
- ctrl+ cest traité par l'interprète comme une exception.
- ctrl+ z'arrête' le processus.
- ctrl+ dquitte python pour de vrai.
Voici quelques sorties de terminaux du monde réel:
example_user@example_server:~$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
ctrl+z
[1]+ Stopped python
example_user@example_server:~$ exit
logout
There are stopped jobs.
Bash n'est pas sorti, je dois exit
encore sortir du shell bash.
- Q: Qu'est-ce qu'un "travail arrêté" ou qu'est-ce que cela signifie?
- Q: Peut-on reprendre un processus arrêté?
- Q: Le premier
exit
supprime- t-il les travaux arrêtés? - Q: Y a - t-il un moyen de sortir du shell la première fois? (sans entrer
exit
deux fois)
Réponses:
Un travail arrêté est un travail qui a été temporairement placé en arrière-plan et qui n'est plus en cours d'exécution mais qui utilise toujours des ressources (par exemple, la mémoire système). Ce travail n'étant pas associé au terminal actuel, il ne peut pas générer de sortie et ne reçoit aucune entrée de l'utilisateur.
Vous pouvez voir les tâches en cours d’exécution à l’aide de la
jobs
commande intégrée de bash, probablement d’autres shells. Exemple:Vous pouvez reprendre un travail arrêté en utilisant la
fg
commande intégrée basun (premier plan). Si vous avez plusieurs commandes qui ont été arrêtées, vous devez spécifier celle à reprendre en transmettant le numéro de jobpec sur la ligne de commandefg
. Si un seul programme est arrêté, vous pouvez utiliserfg
seul:À ce stade, vous êtes de retour dans l'interpréteur python et pouvez quitter en utilisant control-D.
Réciproquement, vous pouvez
kill
utiliser la commande avec soit Jobspec ou PID. Par exemple:Pour utiliser le numéro de travail, faites précéder le nombre par la touche pourcentage (%):
Si vous émettez une commande de sortie avec des tâches arrêtées, l'avertissement que vous avez vu sera donné. Les travaux seront laissés en cours d'exécution pour la sécurité. C'est pour vous assurer que vous savez que vous essayez de supprimer des emplois que vous auriez peut-être oubliés. La deuxième fois que vous utilisez la commande exit, les travaux sont terminés et le shell se ferme. Cela peut entraîner des problèmes pour certains programmes qui ne sont pas conçus pour être supprimés de cette manière.
En bash, il semble que vous puissiez utiliser la
logout
commande qui va tuer les processus arrêtés et sortir. Cela peut entraîner des résultats indésirables.Notez également que certains programmes peuvent ne pas être fermés de cette manière et que votre système risque de se retrouver avec de nombreux processus orphelins utilisant beaucoup de ressources si vous prenez l'habitude de le faire.
Notez que vous pouvez créer un processus d’arrière-plan qui s’arrêtera s’il nécessite l’intervention de l’utilisateur:
Vous pouvez reprendre et supprimer ces travaux de la même manière que les travaux que vous aviez arrêtés avec l'
Ctrl-z
interruption.la source
Un travail arrêté désigne un processus qui a reçu un signal d'arrêt (
SIGSTOP
/SIGTSTP
) du clavier (caractère de suspension Ctrl-Z), d'une commande (par exemplekill -STOP [PID]
) ou d'un autre processus (par exemple, un noyau lorsque le système manque de ressources) et qu'il est en état de pause, il indique donc au système d'arrêter / de suspendre un processus afin qu'il ne fasse aucune exécution / traitement.Emploi shell actifs peuvent être classés par:
jobs
.Le processus arrêté ne reprendra son exécution que si le
SIGCONT
signal lui est envoyé . Ceci peut être réalisé soit parfg
(oufg ID
) qui déplacera la tâche au premier plan, la transformant en tâche en cours,bg
à la poursuivre en arrière-plan, ou en envoyant unSIGCONT
signal (par exemplekill -CONT [PID]
).Pour la première fois lorsque vous tapez
exit
/logout
ou appuyez sur Ctrl-D, le shell imprime un message d'avertissement concernant les tâches actives en cours associées à votre terminal. Par conséquent, il ne vous tuera pas sans votre autorisation en confirmant l'action une seconde fois. Si l'checkjobs
option est activée (shopt -s checkjobs
), il peut également répertorier les travaux avec leur statut.Vous pouvez appuyer Ctrl+Ddeux fois sur cette touche ou la maintenir plus longtemps, cela permettra de quitter rapidement le silence, ce qui supprimera les tâches actuellement arrêtées / en cours.
Vous pouvez également les désavouer (
disown
) de les laisser ou les tuer manuellement:kill $(jobs -p)
.la source