C'est ce qui s'est passé lorsque j'ai exécuté sudo su
suivi deexit
$ sudo su
# exit
exit
$
La commande exit ne ferme pas mon émulateur de terminal.
Est-ce un terminal enfant?
command-line
bash
sudo
gnome-terminal
su
Reeshabh Ranjan
la source
la source
Même terminal, coque différente.
Les processus enfants que vous exécutez à partir d'un shell, y compris les shells enfants, utilisent automatiquement le même terminal. Ce n'est pas spécifique à
sudo
en aucune façon - c'est généralement comment cela fonctionne lorsque vous exécutez un programme à partir de votre shell.Les coques et les terminaux sont des choses différentes. Un shell est ce que vous utilisez pour exécuter des commandes dans un terminal . Un shell peut fonctionner de manière interactive - il vous donne une invite, vous lui donnez une commande, il exécute la commande ou affiche une erreur expliquant pourquoi il ne peut pas, et le processus se répète jusqu'à ce que vous quittiez le shell. Ou il peut fonctionner de manière non interactive, en exécutant un script .
Même si votre terminal est (probablement!) Émulé , pas physique , néanmoins des systèmes d'exploitation de type Unix comme Ubuntu attribuent des nœuds de périphérique à chacun de vos terminaux, et vous pouvez vérifier quel terminal vous utilisez avec la
tty
commande. Il sera généralement/dev/pts/0
,/dev/pts/1
,/dev/pts/2
, etc. , pour une fenêtre de terminal ou connexion SSH , ou/dev/tty1
,/dev/tty2
, etc. , pour les consoles virtuelles . En réalité, cetty
qui est fait, c'est de vous dire à partir de quel terminal, le cas échéant, l' entrée est prise; voir ci-dessous pour plus de détails.Vous pouvez voir que, même s'il
sudo su
crée un nouveau shell comme l'explique très bien Yaron , le terminal que vous utilisez ne change pas.Bien sûr, il existe une autre façon de constater que le terminal est le même: vous écrivez toujours l'entrée de la même manière et au même endroit, et la lecture de la sortie de la même manière et au même endroit.
Quelques détails techniques
La plupart des commandes dans un shell - comme
ls
,cp
,mv
,rm
,touch
,wc
,du
,df
,ssh
,su
,sudo
,sh
,bash
et beaucoup plus - provoquer un processus enfant à créer. Ce processus enfant a votre shell comme parent mais il s'agit d'un programme distinct. Par défaut, il est connecté au même terminal que votre shell.Votre shell est toujours en cours d'exécution, mais il attend en arrière-plan que le programme se termine (ou que vous le suspendiez ). À la fin du programme, le shell est toujours en cours d'exécution et reprend son fonctionnement, vous invitant à entrer votre prochaine commande.
Ce sont les principales exceptions:
cd
ne créent pas du tout de nouveau processus, à moins qu'elles ne soient utilisées dans une construction qui utilise une sous - coquille ( expliquée ici ), comme le(
)
regroupement et les pipelines .&
. (your-command arguments... &
)disown
intégrée , vous pouvez détacher des tâches de votre terminal.Bien que je ne considère pas vraiment cela comme une exception aux processus enfants connectés au même terminal que leur parent, notez qu'un processus que vous exécutez à partir d'un shell dans un terminal ne prendra pas toujours l'entrée de ce terminal ou n'en enverra pas de sortie à ce terminal. :
<
,>
et les>>
opérateurs.|
.Comme la
tty
commande ne vérifie que le terminal de son entrée standard, vous pouvez le "tromper":Ou, moins sournoisement:
la source