suspend
est une commande intégrée dans Bash. Quand utiliseriez-vous naturellement cette commande et la trouveriez-vous utile?
12
suspend
est une commande intégrée dans Bash. Quand utiliseriez-vous naturellement cette commande et la trouveriez-vous utile?
fork/exec
appel systèmeSTOP
signal) lorsqu'il bifurque un processus enfant. Je suis également un peu confus par votre deuxième commentaire.wait()
me semble raisonnable. J'ai dit que le shell se suspend à chaque fois qu'il lance un processus enfant . Je n'ai rien dit sur la réception de signaux d'arrêt, cela n'aurait aucun sens.Réponses:
Supposons que vous manquiez à la fois de GNU
screen
ettmux
(et de X11 et de consoles virtuelles) mais que vous souhaitiez basculer entre un shell de connexion et un autre shell interactif.Vous devez d'abord vous connecter sur la console, puis démarrer un nouveau shell, bloquant temporairement le shell de connexion. Pour récupérer le shell de connexion pour y travailler, vous le feriez
suspend
. Ensuite, vous devriezfg
récupérer le shell interactif pour continuer avec ce que vous avez fait là-bas.En fait, avec le contrôle des travaux, le shell de connexion peut générer un certain nombre de shells interactifs en tant que jobs d'arrière-plan avec lesquels vous pouvez basculer
fg %1
,fg %2
etc., mais pour revenir au shell de connexion, vous devez utiliser àsuspend
moins que vous ne le souhaitiez manuellementkill -s STOP $$
.Notez également que Ctrl+ Zà l'invite dans un shell interactif ne le suspendra pas.
EDIT: J'avais initialement une longue section hypothétique sur l'utilisation de
suspend
dans un script, mais comme la commande nécessite un contrôle des travaux et que les shells non interactifs n'ont généralement pas de contrôle des travaux, j'ai supprimé cette section.Section supprimée avec
suspend
remplacée parkill -s STOP $$
(cela n'appartient plus vraiment à la réponse, mais cela peut être intéressant pour d'autres de toute façon):Disons que vous avez un processus d'arrière-plan (un script) dans un script, et que ce processus d'arrière-plan à un certain stade doit s'arrêter et attendre que le processus parent lui dise de continuer. Cela pourrait être pour que le parent ait le temps d'extraire et de déplacer des fichiers en place ou quelque chose comme ça.
Le script enfant suspendait (
kill -s STOP $$
) et le script parent lui envoyait unCONT
signal quand il était correct de continuer.Il vous donne la possibilité d'implémenter une sorte de synchronisation entre un processus parent et un processus enfant (bien que très basique car le processus shell parent doit plus ou moins deviner que le processus enfant est suspendu, bien que cela puisse être résolu en ayant l'enfant intercepter
CONT
et ne pas suspendre si ce signal est reçu trop tôt).la source