Dies ist, was passiert ist, als ich ausgeführt habe, sudo su
gefolgt vonexit
$ sudo su
# exit
exit
$
Der Befehl exit schließt meinen Terminalemulator nicht.
Ist es ein Kinderterminal?
command-line
bash
sudo
gnome-terminal
su
Reeshabh Ranjan
quelle
quelle
Gleiches Terminal, andere Shell.
Untergeordnete Prozesse, die Sie von einer Shell aus ausführen, einschließlich untergeordneter Shells, verwenden dasselbe Terminal automatisch. Dies ist
sudo
in keiner Weise spezifisch - so funktioniert es im Allgemeinen, wenn Sie ein Programm von Ihrer Shell aus ausführen.Muscheln und Terminals sind verschiedene Dinge. Mit einer Shell können Sie Befehle in einem Terminal ausführen . Eine Shell kann interaktiv arbeiten - sie gibt Ihnen eine Eingabeaufforderung, Sie geben ihr einen Befehl, sie führt den Befehl aus oder zeigt einen Fehler an, warum dies nicht möglich ist, und der Vorgang wird wiederholt, bis Sie die Shell beenden. Oder es kann nicht interaktiv arbeiten und ein Skript ausführen .
Auch wenn Ihr Terminal (wahrscheinlich!) Emuliert , nicht körperliche , dennoch Unix-ähnlichen Systemen wie Ubuntu assign Betriebsgeräteknoten zu jedem Ihrer Terminals, und Sie können überprüfen , was Terminal Sie mit dem verwendeten
tty
Befehl. Es wird in der Regel/dev/pts/0
,/dev/pts/1
,/dev/pts/2
, usw. , für ein Terminal - Fenster oder SSH - Verbindung , oder/dev/tty1
,/dev/tty2
, usw. , für virtuelle Konsolen . Wastty
Sie wirklich tun müssen, ist Ihnen zu sagen, von welchem Terminal, falls vorhanden, Eingaben stammen. siehe unten für Details.Sie können sehen, dass sich das von Ihnen verwendete Terminal nicht ändert , obwohl
sudo su
eine neue Shell erstellt wird, wie Yaron sehr gut erklärt .Natürlich gibt es eine andere Möglichkeit, um festzustellen, dass das Terminal dasselbe ist: Sie schreiben die Eingabe immer noch auf dieselbe Weise und an derselben Stelle und lesen die Ausgabe auf dieselbe Weise und an derselben Stelle.
Ein paar technische Details
Die meisten Befehle ausführen Sie in einem Shell - wie
ls
,cp
,mv
,rm
,touch
,wc
,du
,df
,ssh
,su
,sudo
,sh
,bash
, und viele mehr - bewirken , dass ein Kind - Prozess erstellt werden. Dieser untergeordnete Prozess hat Ihre Shell als übergeordnetes Element, ist jedoch ein separates Programm. Standardmäßig ist es mit demselben Terminal wie Ihre Shell verbunden.Ihre Shell wird noch ausgeführt, wartet jedoch im Hintergrund darauf, dass das Programm beendet wird (oder dass Sie es anhalten ). Wenn das Programm beendet wird, wird die Shell weiterhin ausgeführt und der Betrieb wieder aufgenommen, sodass Sie zur Eingabe Ihres nächsten Befehls aufgefordert werden.
Dies sind die Hauptausnahmen:
cd
erstellen keinen neuen Prozess, es sei denn, sie werden in einem Konstrukt verwendet, das eine ( hier erläuterte ) Subshell verwendet , z. B. Gruppierung und Pipelines .(
)
&
. (your-command arguments... &
)disown
Funktion können Sie Jobs von Ihrem Terminal trennen .Obwohl ich dies nicht wirklich als Ausnahme für untergeordnete Prozesse betrachten würde, die mit demselben Terminal wie das übergeordnete verbunden sind, beachten Sie, dass ein Prozess, den Sie von einer Shell in einem Terminal ausführen, nicht immer Eingaben von diesem Terminal entgegennimmt oder Ausgaben an dieses Terminal sendet ::
<
,>
und>>
Betreibern.|
.Da der
tty
Befehl nur prüft, welches Terminal seine Standardeingabe ist, können Sie ihn "täuschen":Oder weniger verschlagen:
quelle