Inilah yang terjadi ketika saya dieksekusi sudo su
diikuti olehexit
$ sudo su
# exit
exit
$
Perintah keluar tidak menutup emulator terminal saya.
Apakah ini terminal anak?
command-line
bash
sudo
gnome-terminal
su
Reeshabh Ranjan
sumber
sumber
Terminal yang sama, shell yang berbeda.
Proses anak yang Anda jalankan dari shell, termasuk shell anak, menggunakan terminal yang sama secara otomatis. Ini tidak spesifik untuk
sudo
cara apa pun - ini umumnya cara kerjanya ketika Anda menjalankan program apa pun dari shell Anda.Kerang dan terminal adalah hal yang berbeda. Sebuah shell adalah apa yang Anda gunakan untuk menjalankan perintah dalam terminal . Shell dapat beroperasi secara interaktif - ia memberi Anda prompt, Anda memberikannya perintah, menjalankan perintah atau menunjukkan kesalahan tentang mengapa ia tidak bisa, dan proses berulang sampai Anda keluar dari shell. Atau dapat beroperasi secara nonaktif, menjalankan skrip .
Meskipun terminal Anda (mungkin!) Dicontoh , bukan fisik , sistem operasi mirip Unix seperti Ubuntu menetapkan node perangkat ke masing-masing terminal Anda, dan Anda dapat memeriksa terminal apa yang Anda gunakan dengan
tty
perintah. Ini biasanya akan/dev/pts/0
,/dev/pts/1
,/dev/pts/2
, dll , untuk jendela terminal atau koneksi SSH , atau/dev/tty1
,/dev/tty2
, dll , untuk konsol virtual . Sebenarnya apa yang harustty
dilakukan adalah memberi tahu Anda dari terminal mana, jika ada, input diambil; lihat di bawah untuk detailnya.Anda dapat melihat itu, meskipun
sudo su
membuat shell baru seperti yang dijelaskan Yaron dengan sangat baik , terminal yang Anda gunakan tidak berubah.Tentu saja, ada cara lain untuk mengamati bahwa terminalnya sama: Anda masih menulis input dengan cara yang sama dan di tempat yang sama, dan membaca output dengan cara yang sama dan di tempat yang sama.
Beberapa detail teknis
Sebagian besar perintah yang dijalankan dalam shell - seperti
ls
,cp
,mv
,rm
,touch
,wc
,du
,df
,ssh
,su
,sudo
,sh
,bash
, dan banyak lagi - menyebabkan proses anak yang akan dibuat. Proses anak ini memiliki shell Anda sebagai induknya tetapi merupakan program yang terpisah. Secara default, ini terhubung ke terminal yang sama dengan shell Anda.Shell Anda masih berjalan, tetapi menunggu di latar belakang program untuk menghentikan (atau Anda untuk menangguhkannya ). Ketika program berakhir, shell masih berjalan dan melanjutkan operasi, meminta Anda untuk perintah Anda berikutnya.
Ini adalah pengecualian utama:
cd
tidak membuat proses baru sama sekali, kecuali mereka digunakan dalam konstruksi yang menggunakan subkulit ( dijelaskan di sini ), seperti(
)
pengelompokan dan jalur pipa .&
. (your-command arguments... &
)disown
builtin , Anda dapat melepaskan pekerjaan dari terminal Anda.Meskipun saya tidak akan benar-benar menganggap ini pengecualian untuk proses anak yang terhubung ke terminal yang sama dengan orang tua mereka, perhatikan bahwa proses yang Anda jalankan dari shell di terminal tidak akan selalu mengambil input dari terminal itu atau mengirim output ke terminal itu :
<
,>
, dan>>
operator.|
.Karena
tty
perintah hanya memeriksa terminal mana input standarnya, Anda dapat "membodohinya":Atau, yang kurang jelas:
sumber