Supposons que vous manquiez à la fois de GNU screen
et tmux
(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 devriez fg
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 manuellement kill -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 par kill -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 un CONT
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).
fork/exec
appel système