Это то, что случилось, когда я казнил, sudo su
а затемexit
$ sudo su
# exit
exit
$
Команда выхода не закрывает мой эмулятор терминала.
Это дочерний терминал?
command-line
bash
sudo
gnome-terminal
su
Ризхаб Ранджан
источник
источник
Тот же терминал, другая оболочка.
Дочерние процессы, которые вы запускаете из оболочки, включая дочерние оболочки, автоматически используют один и тот же терминал. Это не относится ни к
sudo
какому способу - это, как правило, работает, когда вы запускаете любую программу из вашей оболочки.Снаряды и терминалы это разные вещи. Оболочки является то , что вы используете для выполнения команд в терминале . Оболочка может работать в интерактивном режиме - она выдает подсказку, вы даете ей команду, запускает команду или показывает ошибку, почему она не может, и процесс повторяется до тех пор, пока вы не выйдете из оболочки. Или он может работать не интерактивно, запуская скрипт .
Хотя ваш терминал (вероятно!) Эмулируется , а не физический , тем не менее Unix-подобные операционные системы, такие как Ubuntu, назначают узлы устройства каждому из ваших терминалов, и вы можете проверить, какой терминал вы используете с помощью
tty
команды. Это , как правило/dev/pts/0
,/dev/pts/1
,/dev/pts/2
, и т.д. , для окна терминала или подключения SSH , или/dev/tty1
,/dev/tty2
, и т.д. , для виртуальных консолей . На самом деле то, чтоtty
нужно, это сказать вам, с какого терминала, если он есть, берется вход ; подробности смотрите ниже.Вы можете видеть, что, несмотря
sudo su
на то, что Yaron создает новую оболочку, что очень хорошо объясняет , используемый вами терминал не меняется.Конечно, есть еще один способ заметить, что терминал одинаков: вы по-прежнему пишете ввод одинаково и в одном месте и читаете вывод одинаково и в том же месте.
Несколько технических деталей
Большинство команд , которые выполняются в оболочке - такие , как
ls
,cp
,mv
,rm
,touch
,wc
,du
,df
,ssh
,su
,sudo
,sh
,bash
, и многое другое - вызвать дочерний процесс должен быть создан. Этот дочерний процесс имеет вашу оболочку в качестве родителя, но это отдельная программа. По умолчанию он подключен к тому же терминалу, что и ваша оболочка.Ваша оболочка все еще работает, но в фоновом режиме ожидает завершения программы (или пока вы не приостановите ее ). Когда программа завершается, оболочка все еще работает и возобновляет работу, запрашивая следующую команду.
Это основные исключения:
cd
вообще не создают новый процесс, если только они не используются в конструкции, которая использует подоболочку ( объяснено здесь ), такую как(
)
группировка и конвейеры .&
. (your-command arguments... &
)disown
встроенной функции вы можете отсоединить задания от вашего терминала.Хотя я бы не стал рассматривать это как исключение для дочерних процессов, подключенных к тому же терминалу, что и их родительский, обратите внимание, что процесс, который вы запускаете из оболочки в терминале, не всегда будет получать ввод с этого терминала или отправлять вывод на этот терминал :
<
,>
и>>
операторами.|
.Поскольку
tty
команда только проверяет, какой терминал является ее стандартным вводом, вы можете «обмануть» его:Или менее коварно:
источник