Це те , що трапилося , коли я стратив з sudo su
подальшимexit
$ sudo su
# exit
exit
$
Команда виходу не закриває мій емулятор терміналу.
Це дитячий термінал?
Це те , що трапилося , коли я стратив з sudo su
подальшимexit
$ sudo su
# exit
exit
$
Команда виходу не закриває мій емулятор терміналу.
Це дитячий термінал?
Відповіді:
Після виконання sudo su
або створення нової оболонки створюється.su user
Виконання exit
(або Ctrl+ D) вийде з новоствореної оболонки і поверне вас до попередньої оболонки.
Початкова точка - оболонка bash працює на PID 25050:
$ ps
PID TTY TIME CMD
25050 pts/17 00:00:00 bash
25200 pts/17 00:00:00 ps
Запуск sudo su
створює новий процес bash, який працює на PID 25203:
$ sudo su
# ps
PID TTY TIME CMD
25201 pts/17 00:00:00 sudo
25202 pts/17 00:00:00 su
25203 pts/17 00:00:00 bash
25213 pts/17 00:00:00 ps
# exit
Вихід sudo su
і повернення до початкової точки - оболонка bash працює на PID 25050:
$ ps
PID TTY TIME CMD
25050 pts/17 00:00:00 bash
25214 pts/17 00:00:00 ps
$
Дочірні процеси, які ви запускаєте з оболонки, включаючи дочірні оболонки, автоматично використовують той же термінал. Це sudo
в жодному разі не характерно - це, як правило, це працює, коли ви запускаєте будь-яку програму зі своєї оболонки.
Оболонки та клеми - це різні речі. Оболонки є те , що ви використовуєте для виконання команд в терміналі . Оболонка може працювати інтерактивно - вона дає вам підказку, ви даєте їй команду, вона запускає команду або показує помилку про те, чому вона не може, і процес повторюється, поки ви не вийдете з оболонки. Або він може працювати неінтерактивно, запускаючи сценарій .
Незважаючи на те, що ваш термінал (напевно!) Емульований , а не фізичний , проте Unix-подібні операційні системи, такі як Ubuntu, призначають вузли пристроїв кожному з ваших терміналів, і ви можете перевірити, яким терміналом ви користуєтесь tty
командою. Це , як правило /dev/pts/0
, /dev/pts/1
, /dev/pts/2
, і т.д. , для вікна терміналу або підключення SSH , або /dev/tty1
, /dev/tty2
, і т.д. , для віртуальних консолей . Дійсно tty
, це сказати вам, з якого терміналу, якщо він є, береться вхід ; див. деталі нижче.
ek@Io:~$ tty
/dev/pts/1
ek@Io:~$ bash
ek@Io:~$ tty
/dev/pts/1
ek@Io:~$ exit
exit
ek@Io:~$ sudo su
[sudo] password for ek:
root@Io:/home/ek# tty
/dev/pts/1
root@Io:/home/ek# exit
exit
ek@Io:~$
Ви можете бачити, що навіть якщо sudo su
створює нову оболонку, як дуже добре пояснює Ярон , термінал, який ви використовуєте, не змінюється.
Звичайно, є ще один спосіб зауважити, що термінал той самий: ви все одно пишете вхід тим самим і в тому самому місці, а читання виводиться так само і в тому самому місці.
Більшість команд , які виконуються в оболонці - такі , як ls
, cp
, mv
, rm
, touch
, wc
, du
, df
, ssh
, su
, sudo
, sh
, bash
, і багато іншого - викликати дочірній процес повинен бути створений. Цей дочірній процес має свою оболонку як свого батьківського, але це окрема програма. За замовчуванням він підключений до того ж терміналу, що і ваша оболонка.
Ваша оболонка все ще працює, але вона чекає у фоновому режимі, коли програма завершиться (або ви призупините її ). Коли програма закінчується, оболонка все ще працює і вона продовжує роботу, що запропонує вам наступну команду.
Це основні винятки:
cd
не створювати новий процес на всіх, якщо вони не використовуються в конструкції , в якій використовується подоболочка ( описано тут ), такі як (
)
угруповання і трубопроводи .&
. ( your-command arguments... &
)disown
вбудованої програми ви можете від'єднати завдання від свого терміналу.Хоча я б не вважав це винятком з підключення дочірнього процесу до того ж терміналу, що і їхній батько, зауважте, що процес, який ви запускаєте з оболонки в терміналі, не завжди буде приймати вхід з цього терміналу або надсилати вихід до цього терміналу. :
<
, >
і >>
операторами.|
.Оскільки tty
команда перевіряє лише, який термінал є її стандартним входом, ви можете "обдурити" це:
ek@Io:~$ tty
/dev/pts/1
ek@Io:~$ tty </dev/pts/0
/dev/pts/0
Або, менш виразно:
ek@Io:~$ tty </dev/null # not a terminal
not a tty
ek@Io:~$ tty <&- # closes the input stream
not a tty