To, co się stało, kiedy wykonywane sudo su
następnieexit
$ sudo su
# exit
exit
$
Polecenie exit nie zamyka mojego emulatora terminala.
Czy to terminal potomny?
command-line
bash
sudo
gnome-terminal
su
Reeshabh Ranjan
źródło
źródło
Ten sam terminal, inna powłoka.
Procesy potomne uruchamiane z powłoki, w tym powłoki potomne, używają automatycznie tego samego terminala. Nie jest to
sudo
w żaden sposób specyficzne - na ogół działa to po uruchomieniu dowolnego programu z powłoki.Powłoki i terminale to różne rzeczy. Powłoka jest to, czego używasz do uruchamiania poleceń w terminalu . Powłoka może działać interaktywnie - wyświetla monit, wydaje polecenie, uruchamia polecenie lub wyświetla komunikat o błędzie, dlaczego nie może, a proces powtarza się, dopóki nie opuścisz powłoki. Lub może działać nieinteraktywnie, uruchamiając skrypt .
Nawet jeśli terminal jest (prawdopodobnie!) Emulowane , nie fizyczny , niemniej uniksowych systemów operacyjnych takich jak Ubuntu Przypisywanie urządzeń węzłów do każdego z terminali, i można sprawdzić co zacisk korzystania z
tty
polecenia. Zwykle będzie to/dev/pts/0
,/dev/pts/1
,/dev/pts/2
, itd. , Na oknie terminala lub połączenia SSH lub/dev/tty1
,/dev/tty2
, itp , na wirtualnych konsolach . Naprawdę to, cotty
robi jest powiedzieć, który zacisk ewentualne wejście jest wzięte z; szczegóły poniżej.Widać, że chociaż
sudo su
tworzy nową powłokę, jak bardzo dobrze wyjaśnia Yaron , terminal, którego używasz, nie zmienia się.Oczywiście istnieje inny sposób zaobserwowania, że terminal jest taki sam: nadal piszesz dane wejściowe w ten sam sposób i w tym samym miejscu, i odczytujesz dane wyjściowe w ten sam sposób i w tym samym miejscu.
Kilka szczegółów technicznych
Większość poleceń uruchomić w powłoce - takie jak
ls
,cp
,mv
,rm
,touch
,wc
,du
,df
,ssh
,su
,sudo
,sh
,bash
, i wiele więcej - spowodować proces dziecko ma zostać utworzony. Ten proces potomny ma powłokę jako swojego rodzica, ale jest to osobny program. Domyślnie jest podłączony do tego samego terminala co twoja powłoka.Twoja powłoka nadal działa, ale w tle czeka na zakończenie programu (lub na jego zawieszenie ). Po zakończeniu programu powłoka nadal działa i wznawia działanie, monitując o następne polecenie.
Oto główne wyjątki:
cd
ogóle nie tworzą nowego procesu, chyba że są używane w konstrukcji, która wykorzystuje podpowłokę ( wyjaśnioną tutaj ), taką jak(
)
grupowanie i potoki .&
. (your-command arguments... &
)disown
wbudowanego polecenia , można odłączyć zadania z terminalu.Chociaż tak naprawdę nie uważałbym tego za wyjątek dla procesów potomnych podłączonych do tego samego terminala co ich rodzic, zauważ, że proces uruchamiany z powłoki w terminalu nie zawsze będzie pobierał dane z tego terminala lub wysyłał dane wyjściowe do tego terminala :
<
,>
i>>
operatorów.|
.Ponieważ
tty
polecenie sprawdza tylko, który terminal jest jego standardowym wejściem, możesz go oszukać:Lub mniej przebiegle:
źródło